Як я писав у своєму коментарі, є деякі спеціальні символи, які потребують додаткової обережності під час роботи в командному рядку оболонки (або в скриптах оболонки). Один з них - $
знак, який зазвичай вказує на змінну. Якщо це слід сприймати буквально, вам потрібно уникнути цього (або укласти весь рядок одинарними лапками). Аналогічні правила для лапок.
Як має виглядати ваша команда із втечею $
, ви вже можете дізнатися у відповіді 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
- що це звичайні речі, які потрібно робити на оболонці, коли маєте справу з буквальними$
знаками, що не вказують на змінну?