3 votes

Les commandes s'exécutent dans le terminal mais provoquent des erreurs dans le script shell

J'ai créé un script .sh qui définit les autorisations des applications sur les appareils Android. Si je pousse le script sur /sdcard et le faire passer par adb shell avec commande sh ./test.sh l'erreur suivante se produit pour chaque autorisation :

Bad argument: java.lang.IllegalArgumentException: Unknown permission: android.permission.WRITE_EXTERNAL_STORAGE

Voici mon scénario :

#!/bin/bash
pm grant com.android.camera2 android.permission.RECORD_AUDIO
pm grant com.android.camera2 android.permission.CAMERA
pm grant com.android.camera2 android.permission.ACCESS_FINE_LOCATION
pm grant com.android.camera2 android.permission.WRITE_EXTERNAL_STORAGE
pm grant com.android.camera2 android.permission.READ_EXTERNAL_STORAGE

pm grant com.android.chrome android.permission.CAMERA
pm grant com.android.chrome android.permission.ACCESS_FINE_LOCATION
pm grant com.android.chrome android.permission.WRITE_EXTERNAL_STORAGE
pm grant com.android.chrome android.permission.READ_EXTERNAL_STORAGE
pm grant com.android.chrome android.permission.RECORD_AUDIO

Donc à chaque fois la même commande pour différentes autorisations et différentes applications. Si j'utilise ces commandes manuellement sur adb shell ça marche.

Je n'ai pas d'autorisation Root et le système d'exploitation de l'appareil est Android 8.1.0.

1voto

Irfan Latif Points 16863

Apparemment, il n'y a pas de raison pour cela, sauf le problème éventuel de la fins de lignes ce qui arrive souvent. Sur les systèmes d'exploitation *NIX (y compris Android), les lignes se terminent par un saut de ligne (LF ; \n ou 0x0A ) alors que sous DOS/Windows, on utilise le retour chariot + saut de ligne (CRLF ; \r\n ou 0x0D0x0A ). Sur Mac, seul CR est le marqueur de fin de ligne. Ainsi, certains éditeurs de texte peuvent encoder des sauts de ligne erronés dans les scripts shell :

~$ cat -v /sdcard/test.sh
#!/bin/bash^M
^M
pm grant com.termux android.permission.WRITE_EXTERNAL_STORAGE^M

Ici ^M est la représentation visuelle de CR qui peut être corrigé avec dos2unix , sed ou tr utilitaire :

~$ dos2unix /sdcard/test.sh
~$ cat -v /sdcard/test.sh
#!/bin/bash

pm grant com.termux android.permission.WRITE_EXTERNAL_STORAGE

Maintenant, le problème devrait être résolu.

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