8 votes

Comment exécuter des commandes après avoir quitté le shell ADB?

Je code un script pour automatiser un processus d'exportation de configuration d'application.

adb shell
...

...
exit

Le problème est : après avoir sauvegardé la sauvegarde, je veux extraire le fichier sur mon ordinateur, en utilisant ceci :

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

Cependant, je n'arrive pas à comprendre comment exécuter cette commande, après avoir quitté adb shell. Il semble que les commandes après exit sont ignorées :

adb shell
...

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

Peut-être que c'est un problème que je devrais adresser à la communauté "Unix & Linux", mais j'ai décidé d'essayer ici en premier lieu.

1 votes

Au lieu d'écrire la sauvegarde dans un fichier, écrivez-la dans stdout et exécutez la commande en utilisant adb exec-out ... > localfile. Ensuite, le fichier sera exécuté sur le téléphone et la sortie sera écrite sur le disque de votre PC.

0 votes

Fonctionne bien pour moi.. essaie un second terminal

12voto

Milner Points 533

Écrivez votre script un peu différemment :

#!/bin/bash
adb shell <

...

EOF

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

Tout ce qui se trouve entre < et le `EOF` étant sur une ligne séparée est exécuté dans `adb shell`, tout ce qui se trouve à l'extérieur est exécuté sur votre machine locale. Remarque : pas besoin de `exit`.

4 votes

La syntaxe utilisée est un "heredoc". Je recommande fortement de lire sur stackoverflow.com/questions/2953081/…. L'utilisateur initial n'a pas publié le contenu réel du script, qui peut ou non contenir des noms de variables censés être utilisés dans le shell adb, ou à l'extérieur, et cette question contient des informations sur la syntaxe et d'autres choses à noter.

1 votes

Bonne remarque, oui - je n'ai pas compris le nom. Cependant, j'utilise beaucoup HEREDOC, et je viens de le vérifier à nouveau : contrairement à ce que suggère la réponse principale là-bas, les variables sont interprétées à l'intérieur de HEREDOC (j'ai essayé l'exemple donné, comme foo=FOOBAR\ncat <, et il a imprimé "C'est FOOBAR"). Et oui, comme dans l'exemple, j'utilise Bash; j'ai travaillé avec `cat` ainsi qu'avec `adb shell`. Ne croyez jamais aveuglément sans vérification, même les réponses plébiscitées comme celle-là ;) Ce qui ne fonctionne cependant PAS : définir la variable à l'intérieur du HEREDOC n'aura aucun effet "ensuite".

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X