Como escribí en mi comentario, hay algunos caracteres especiales que necesitan un cuidado especial cuando se trabaja en el indicador de comandos de shell (o en scripts de shell). Uno de ellos es el $
signo, que generalmente indica una variable. Si eso debe tomarse literalmente, debe escapar (o encerrar la cadena completa entre comillas simples). Reglas similares para comillas.
Cómo debería verse su comando con un escape $
, ya puede encontrar en eldarera esta respuesta :
shell@android:/ # am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity
Tenga en cuenta la "barra diagonal inversa" en frente de $
- esa es la señal de escape. Use lo mismo para las comillas o espacios en blanco, si su comando incluye algunos para tomarlos literalmente, por ej.
myscript.sh first\ parameter\!
myscript.sh "first parameter!"
ambos harían lo mismo: convertir la cadena en un solo parámetro. En el ejemplo de su am start
comando, esto es lo que sucedió al analizar:
- mando:
am
- parámetro 1:
start
- parámetro 2:
-S
- parámetro 3:
com.android.settings/.Settings$PowerUsageSummaryActivity
- tiene una
$
interpretación: la variable $PowerUsageSummaryActivity
no está establecida, por lo que está vacía
- conclusión: el parámetro 3 es
com.android.settings/.Settings
Tenga en cuenta también que si ejecuta esto directamente adb shell
, el comando pasa por el análisis de shell dos veces, por lo que debe escapar o citar el comando nuevamente , así:
user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
'com.android.settings/.Settings$PowerUsageSummaryActivity'
, o escapar de lo$
similarcom.android.settings/.Settings\$PowerUsageSummaryActivity
, que es lo que se suele hacer en el shell cuando se trata de$
signos literales que no indican una variable?