Comme je l'ai écrit dans mon commentaire, certains caractères spéciaux nécessitent une attention particulière lorsque l'on travaille à l'invite du shell (ou dans des scripts shell). L'un d'eux est le caractère $
qui indique généralement une variable. S'il doit être pris au sens littéral, vous devez l'échapper (ou entourer la chaîne entière de guillemets simples). Règles similaires pour les guillemets.
A quoi devrait ressembler votre commande avec un s'est échappé $
que vous pouvez déjà trouver dans réponse d'eldarathis :
shell@android:/ # am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity
Notez la barre oblique inversée devant le nom de l'entreprise. $
-- c'est le signe d'évasion. Faites de même pour les guillemets ou les blancs, si votre commande en comporte certains à prendre au pied de la lettre, par ex.
myscript.sh first\ parameter\!
myscript.sh "first parameter!"
les deux feraient la même chose : faire de la chaîne un paramètre unique. Dans l'exemple de votre am start
c'est ce qui s'est passé lors de l'analyse :
- commandement :
am
- paramètre 1 :
start
- paramètre 2 :
-S
- paramètre 3 :
com.android.settings/.Settings$PowerUsageSummaryActivity
- a un
$
interprétation : variable $PowerUsageSummaryActivity
n'est pas défini, donc vide
- conclusion : le paramètre 3 est
com.android.settings/.Settings
Notez également que si vous l'exécutez directement via adb shell
la commande est analysée deux fois par l'interpréteur de commandes. Vous devez donc échapper à la commande ou la citer. à nouveau comme ceci :
user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'