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