Como escrevi no meu comentário, existem alguns caracteres especiais que precisam de cuidados extras ao trabalhar no prompt do shell (ou nos scripts do shell). Um deles é o $
sinal, que geralmente indica uma variável. Se isso for considerado literalmente, você precisará escapá-lo (ou coloque a cadeia inteira entre aspas simples). Regras semelhantes para aspas.
Como seu comando deve parecer com um escape $
, você já pode encontrar na resposta de eldarerathis :
shell@android:/ # am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity
Observe a barra invertida na frente do $
- esse é o sinal de fuga. Use o mesmo para aspas ou espaços em branco, se o seu comando incluir algumas que devem ser tomadas literalmente, por exemplo,
myscript.sh first\ parameter\!
myscript.sh "first parameter!"
ambos fariam o mesmo: transformando a string em um único parâmetro. No exemplo do seu am start
comando, foi o que aconteceu na análise:
- comando:
am
- parâmetro 1:
start
- parâmetro 2:
-S
- parâmetro 3:
com.android.settings/.Settings$PowerUsageSummaryActivity
- tem uma
$
, interpretando: a variável $PowerUsageSummaryActivity
não está definida, portanto, vazia
- conclusão: o parâmetro 3 é
com.android.settings/.Settings
Observe também que, se você executar isso diretamente via adb shell
, o comando passará pela análise de shell duas vezes, portanto, você precisa escapar ou citar o comando novamente , assim:
user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
'com.android.settings/.Settings$PowerUsageSummaryActivity'
- ou escapar do$
mesmocom.android.settings/.Settings\$PowerUsageSummaryActivity
- que é a coisa usual a se fazer no shell ao lidar com$
sinais literais que não indicam uma variável?