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 startpolecenia, tak się stało podczas analizowania:
- Komenda:
am
- parametr 1:
start
- parametr 2:
-S
- parametr 3:
com.android.settings/.Settings$PowerUsageSummaryActivity
- ma
$, interpretacja: zmienna $PowerUsageSummaryActivitynie 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?