3 votos

Los comandos se ejecutan en el terminal pero arrojan errores en el shell script

He creado un .sh script que establece los permisos de la aplicación en los dispositivos Android. Si empujo el script en /sdcard y pasarlo por adb shell con el comando sh ./test.sh En cada permiso se produce el siguiente error:

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

Aquí está mi script:

#!/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

Así que cada vez el mismo comando para diferentes permisos y diferentes aplicaciones. Si estoy usando estos comandos manualmente en adb shell funciona.

No tengo permisos Root y el sistema operativo del dispositivo es Android 8.1.0

1voto

Jack Wade Puntos 231

Aparentemente no parece haber ninguna razón para esto, excepto el posible problema con finales de línea lo que ocurre a menudo. En los sistemas operativos *NIX (incluido Android), las líneas terminan con un salto de línea (LF; \n o 0x0A ) mientras que en DOS/Windows con Retorno de carro + Avance de línea (CRLF; \r\n o 0x0D0x0A ). En Mac, sólo CR es el marcador de fin de línea. Por lo tanto, algunos editores de texto pueden codificar saltos de línea erróneos en los scripts del shell:

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

Aquí ^M es la representación visual de CR que se puede arreglar con dos2unix , sed o tr utilidad:

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

pm grant com.termux android.permission.WRITE_EXTERNAL_STORAGE

Ahora el problema debería estar resuelto.

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