जैसा कि मैंने अपनी टिप्पणी में लिखा है, शेल प्रॉम्प्ट (या शेल स्क्रिप्ट्स) में काम करते समय कुछ विशेष पात्रों को अतिरिक्त देखभाल की आवश्यकता होती है। उनमें से एक $
संकेत है, जो आमतौर पर एक चर को इंगित करता है। यदि इसे शाब्दिक रूप से लिया जाना चाहिए, तो आपको इसे भागने की जरूरत है (या एकल उद्धरण द्वारा पूरे स्ट्रिंग को संलग्न करें)। उद्धरण चिह्नों के समान नियम।
आपकी आज्ञा एक पलायन के साथ कैसे दिखनी चाहिए $
, आप पहले से ही eldarerathis के उत्तर में पा सकते हैं :
shell@android:/ # am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity
"बैक-स्लैश" पर ध्यान दें $
- यह भागने का संकेत है। उद्धरण चिह्नों या रिक्त स्थान के लिए समान का उपयोग करें, यदि आपकी कमांड में कुछ को शाब्दिक रूप से लिया जाना शामिल है, जैसे
myscript.sh first\ parameter\!
myscript.sh "first parameter!"
दोनों एक ही करेंगे: स्ट्रिंग को एक एकल पैरामीटर बनाना। आपके am start
आदेश के उदाहरण में , पार्सिंग पर यही हुआ है:
- आदेश:
am
- पैरामीटर 1:
start
- पैरामीटर 2:
-S
- पैरामीटर 3:
com.android.settings/.Settings$PowerUsageSummaryActivity
- एक है
$
, व्याख्या करना: चर $PowerUsageSummaryActivity
सेट नहीं है, इसलिए खाली है
- निष्कर्ष: पैरामीटर 3 है
com.android.settings/.Settings
ध्यान दें कि यदि आप इसे सीधे चलाते हैं adb shell
, तो कमांड दो बार शेल पार्सिंग से गुजरती है, इसलिए आपको इस तरह से कमांड को फिर से भागने या उद्धृत करने की आवश्यकता है :
user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
'com.android.settings/.Settings$PowerUsageSummaryActivity'
- या इस$
तरह से बचनाcom.android.settings/.Settings\$PowerUsageSummaryActivity
- जो शेल पर करने के लिए सामान्य सामान है, जो शाब्दिक$
संकेतों से भिन्न नहीं होता है?