Últimamente he estado jugando con scripts .sh en Android. Al principio usaba BusyBox y su utilidad de script integrada, aunque rápidamente me di cuenta de que programar en el teléfono no es lo mejor, así que cambié a mi computadora de escritorio y empecé a usar ADB para enviar mis scripts a mi dispositivo. Todo funcionaba bien durante unas dos semanas, hasta que recientemente los mismos scripts que solían funcionar perfectamente me dicen un error de : not found[0]: syntax error: '{
. He copiado exactamente el mismo código de mi script y he usado BusyBox para que lo cree por mí, y de esa manera funciona perfectamente. Así que el código está bien.
Después de investigar un poco, creo que se debe a los permisos, quizás a la codificación, o también a la ubicación de los scripts. He probado varias ubicaciones diferentes (porque quiero poder ejecutar los scripts sin ser root), y acabé eligiendo /storage/emulated/0
. Si entendí correctamente, este es un enlace simbólico al almacenamiento interno, que es de lectura/escritura sin ser root. Pero ¿quizás a veces ejecutable y a veces no? No lo sé.
Así que mi pregunta es la siguiente: ¿Cuál es la mejor ubicación en un dispositivo Android para ejecutar scripts sin ser root? Preferiblemente una ruta que funcione en cualquier dispositivo Android.
Información:
- Samsung S7 SM-G930F rooteado
- Android 8.0.0
- Estoy usando
#!/system/bin/sh
dentro de los archivos .sh - Ejecuto los scripts con
sh script.sh
- Cuando intento ejecutarlo como ejecutable
./script.sh
, obtengo un error dePermission denied
. Con o sin ser root.
PD: ¡Y si alguien tiene alguna idea de por qué los mismos scripts dejaron de funcionar de repente, estaría encantado de saberlo!
ACTUALIZACIÓN: ¡Gracias a @IrfanLatif, he logrado solucionar el error : not found[0]: syntax error: '{
! Estaba usando Visual Studio Code como mi editor para los scripts, que los guardaba con la Secuencia de Fin de Línea CRLF
, que Android no admite. Para una solución fácil, cambia tus Finales de Línea a LF
, problema resuelto. Consulta los comentarios para más información.
2 votos
@IrfanLatif Sí, ese era exactamente el caso. ¡Muchas gracias! Estaba usando VSCode y tuve que cambiar la secuencia de fin de línea de
CRLF
aLF
. ¡Muchas gracias de verdad!2 votos
Sin acceso de root, no tienes demasiadas opciones para ejecutar un script. Si deseas ejecutar desde
adb shell
, puede ser/sdcard
o/data/local/tmp
. Si deseas ejecutar desde una aplicación emuladora de terminal, puede ser/sdcard
o el directorio privado de la aplicación en/data/data
. No hay un criterio para decidir la ubicación mejor. Depende de tus requisitos específicos o nivel de comodidad.1 votos
Prueba Termux desde Play Store
0 votos
@IrfanLatif No olvides que no puedes llamar a un script directamente (usando
./myscript.sh
) si se encuentra en un sistema de archivos FAT32, ya que no es compatible con los permisos de archivo. (Las tarjetas SD siempre están formateadas en FAT32) Sin embargo, aún puedes usar el formatosh myscript.sh