2 votos

Cómo citar correctamente `adb shell su -c`

adb shell su -c es un comando adb muy utilizado. Normalmente, basta con añadir argumentos a la línea de comandos de la siguiente manera:

adb shell su -c echo ab

Sin embargo, las cosas pueden ser complicadas si quieres añadir citas. Por ejemplo, para imprimir a b (hay 2 espacios), estos no funcionarán:

adb shell su -c echo "a  b"
adb shell su -c "echo \"a  b\""
adb shell su -c "echo 'a  b'"

Tienes que usar esto:

adb shell su -c "\"echo \\\"a  b\\\"\""
adb shell "su -c \"echo \\\"a  b\\\"\""
adb shell su -c "\"echo 'a  b'\""
adb shell "su -c \"echo 'a  b'\""

Me gustaría saber cuál es la forma estándar de escribir dicho comando. Estándar significa que maneja las comillas correctamente y de la manera más sencilla.

Mi investigación actual:

  • adb maneja los argumentos de los comandos de la misma manera que ssh : Los argumentos se conectan (con espacio) en una cadena, y esa cadena se ejecuta.

  • su -c espera una sola cadena como línea de comando, y no hace la concatenación por ti.

Así que creo que la forma más estándar de escribir adb shell su -c debería ser así:

adb shell "su -c \"echo \\\"a  b\\\"\""

Sin embargo, no estoy muy seguro de ello. ¿Alguien tiene una referencia concreta que confirme lo que estoy haciendo o que demuestre que lo estoy haciendo mal?

0 votos

Cuando me encuentro en una situación así, lo hago: adb shell 'su -c "echo a\ \ b"' . Utilizo comillas simples para encerrar todo después de adb shell y comillas dobles dentro, siempre que sea necesario.

1voto

user270645 Puntos 1

La mejor solución sería utilizar comillas simples ( ' ) alrededor del subcomando:

adb shell 'su -c echo "a  b"'

Pero tenga en cuenta que normalmente dentro de las comillas simples todo se toma literalmente y las variables no se expanden. Esto no se aplica cuando se anidan las comillas de esta manera. Como ejemplo:

myvar='123'
echo "$myvar"   # prints 123
echo '$myvar'   # prints $myvar

Pero: (suponiendo que $myvar se ajusta a '123' dentro del shell adb (por ejemplo, en el teléfono) )

adb shell 'su -c echo "$myvar"'    # prints 123

En caso de que quiera utilizar sus propias variables de shell para incluirlas dentro del adb se puede simplemente dar la vuelta a las comillas:

myvar='test'
adb shell "su -c echo '$myvar'"    # prints test

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X