8 votos

¿Cómo ejecutar los comandos, después de salir del shell ADB?

Estoy codificando un script para automatizar el proceso de exportación de la configuración de una aplicación.

adb shell
...
<open app menu>
<open app settings>
<save app backup>
...
exit

El problema es: después de guardar la copia de seguridad quiero sacar el archivo a mi ordenador, usando esto:

adb pull /storage/emulated/0/Backups/ ~/Documents/phone

Aunque, no puedo averiguar cómo ejecutar este comando, después de salir adb shell . Parece que los comandos después de exit se ignoran:

adb shell
...
<open app menu>
<open app settings>
<save app backup>
...
exit
adb pull /storage/emulated/0/Backups/ ~/Documents/phone

Tal vez, este es un tema que debería dirigir a la comunidad de "Unix y Linux", pero decidí intentarlo aquí primero.

1 votos

En lugar de escribir la copia de seguridad en los archivos, escríbalos en stdout y ejecutar el comando con adb exec-out ... > localfile . A continuación, el archivo se ejecutará en el teléfono y la salida se escribirá en el disco de su PC.

0 votos

A mí me funciona bien prueba con un segundo terminal

12voto

Izzy Puntos 45544

Escribe tu script un poco diferente:

#!/bin/bash
adb shell <<EOF
...
<open app menu>
<open app settings>
<save app backup>
...

EOF

adb pull /storage/emulated/0/Backups/ ~/Documents/phone

Todo entre <<EOF y el EOF que se encuentra por separado al inicio de su propia línea se ejecuta en adb shell Todo el exterior se ejecuta en su máquina local. Nota: no exit necesario.

4 votos

La sintaxis utilizada es un "heredoc". Recomiendo encarecidamente la lectura de stackoverflow.com/questions/2953081/ . O.P. no publicó el contenido real del script, que puede o no contener nombres de variables que se supone que se usan en el shell adb, o fuera de él, y esa pregunta contiene información sobre la sintaxis y otras cosas a tener en cuenta.

1 votos

Buen punto, sí - no me puse con el nombre. Sin embargo, uso mucho HEREDOC, y acabo de comprobarlo de nuevo ahora: aparte de lo que sugiere la respuesta superior, las variables se interpretan dentro de HEREDOC (probé el ejemplo dado, como foo=FOOBAR\ncat <<EOF\necho this is ${foo}\nEOF y se imprimió "Esto es FOOBAR"). Y sí, como en el ejemplo, uso Bash; trabajé con cat así como con adb shell . Nunca creas ciegamente sin verificar, ni siquiera las respuestas que han sido votadas como esta ;) Lo que sin embargo NO funciona: poner el var dentro del HEREDOC no tendrá ningún efecto de "después".

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