Comme je l'ai écrit dans mon commentaire, certains caractères spéciaux nécessitent des précautions supplémentaires lorsque vous travaillez à l'invite du shell (ou dans les scripts shell). L'un d'eux est le $
signe, qui indique généralement une variable. Si cela doit être pris à la lettre, vous devez l'échapper (ou entourer la chaîne entière de guillemets simples). Règles similaires pour les guillemets.
À quoi devrait ressembler votre commande avec un échappé $
, vous pouvez déjà trouver dans la réponse d'eldarerathis :
shell@android:/ # am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity
Notez la "barre oblique inverse" devant le $
- c'est le signe d'échappement. Utilisez la même chose pour les guillemets ou les blancs, si votre commande en inclut certains à prendre à la lettre, par exemple
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
commande, voici ce qui s'est passé lors de l'analyse:
- commander:
am
- paramètre 1:
start
- paramètre 2:
-S
- paramètre 3:
com.android.settings/.Settings$PowerUsageSummaryActivity
- a un
$
, interprétant: la variable $PowerUsageSummaryActivity
n'est pas définie, 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 passe deux fois par le shell, vous devez donc échapper ou citer à nouveau la commande , comme ceci:
user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
'com.android.settings/.Settings$PowerUsageSummaryActivity'
- dire - ou de s'échapper du même$
genrecom.android.settings/.Settings\$PowerUsageSummaryActivity
- ce qui est le truc habituel à faire sur le shell lorsqu'il s'agit de$
signes littéraux n'indiquant pas une variable?