2 votes

Comment citer correctement `adb shell su -c`

adb shell su -c est une commande adb couramment utilisée. Normalement, vous avez juste besoin d'ajouter des arguments à la ligne de commande comme ceci:

adb shell su -c echo ab

Cependant, les choses peuvent être délicates si vous souhaitez ajouter des guillemets. Par exemple, pour imprimer a b (il y a 2 espaces), ces commandes ne fonctionneront pas:

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

Vous devez utiliser ces commandes:

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'\""

J'aimerais savoir quelle est la manière standard d'écrire une telle commande. Standard signifie qu'elle gère correctement les guillemets de la manière la plus directe.

Mes recherches actuelles:

  • adb gère les arguments de commande de la même manière que ssh: les arguments sont connectés (avec un espace) dans une chaîne, et cette chaîne est exécutée.

  • su -c attend une seule chaîne en tant que ligne de commande, et il ne réalise pas la concaténation pour vous.

Je pense donc que la manière la plus standard d'écrire adb shell su -c devrait être comme suit:

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

Cependant, je ne suis pas très confiant à ce sujet. Est-ce que quelqu'un a une référence concrète confirmant ce que je fais ou montrant que je me trompe?

0 votes

Lorsque je me trouve dans ce genre de situation, je fais : adb shell 'su -c "echo a\ \ b"'. J'utilise des apostrophes pour encadrer tout ce qui suit adb shell et des guillemets doubles à l'intérieur, chaque fois que nécessaire.

1voto

confetti Points 462

La meilleure solution serait d'utiliser des apostrophes simples (') autour de la sous-commande :

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

Mais veuillez noter qu'en général, tout ce qui est entre apostrophes est pris littéralement et les variables ne sont pas expansées. Cependant, ce n'est pas le cas lorsque vous imbriquez les guillemets de cette manière. Par exemple :

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

Mais : (en supposant que $myvar est défini à '123' à l'intérieur de l'adb shell (par ex. sur le téléphone))

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

Si vous souhaitez utiliser vos propres variables shell à inclure dans la sous-commande adb, il vous suffit de permuter les guillemets :

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

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