Jak napisałem w moim komentarzu, niektóre znaki specjalne wymagają szczególnej uwagi podczas pracy z poleceniami powłoki (lub skryptami powłoki). Jednym z nich jest $
znak, który zwykle wskazuje zmienną. Jeśli należy to potraktować dosłownie, musisz go uciec (lub zawrzeć cały ciąg pojedynczymi cudzysłowami). Podobne zasady dotyczące znaków cudzysłowu.
Jak powinno wyglądać twoje polecenie z ucieczką $
, możesz już znaleźć odpowiedź Eldarerathisa :
shell@android:/ # am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity
Zwróć uwagę na „ukośnik wsteczny” przed $
- to znak ucieczki. Użyj tego samego dla znaków cudzysłowu lub spacji, jeśli twoje polecenie zawiera niektóre, które należy wziąć dosłownie, np
myscript.sh first\ parameter\!
myscript.sh "first parameter!"
oba zrobiłyby to samo: uczynienie z łańcucha pojedynczego parametru. W przykładzie twojego am start
polecenia, tak się stało podczas analizowania:
- Komenda:
am
- parametr 1:
start
- parametr 2:
-S
- parametr 3:
com.android.settings/.Settings$PowerUsageSummaryActivity
- ma
$
, interpretacja: zmienna $PowerUsageSummaryActivity
nie jest ustawiona, więc pusta
- wniosek: parametr 3 to
com.android.settings/.Settings
Zauważ też, że jeśli uruchomisz to bezpośrednio za pomocą adb shell
, polecenie przejdzie dwukrotnie analizę płaszcza, więc musisz uciec lub zacytować polecenie ponownie , tak jak poniżej:
user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
'com.android.settings/.Settings$PowerUsageSummaryActivity'
- lub uciec od$
podobnychcom.android.settings/.Settings\$PowerUsageSummaryActivity
- co zwykle robi się w powłoce, gdy mamy do czynienia z dosłownymi$
znakami nie wskazującymi zmiennej?