4 votos

¿Dónde puedo ejecutar un script .sh en Android sin ser root?

Ú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 de Permission 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 a LF. ¡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

8voto

pr0nin Puntos 353

/storage/emulated/0 generalmente está montado de una manera que evita la ejecución de programas desde esta ubicación.

Por lo tanto, incluso con un bit ejecutable configurado para su script, no podrás ejecutarlo directamente. Por supuesto, aún puedes ejecutarlo a través de sh:

/system/bin/sh /storage/emulated/0/test.sh

Alternativamente, está el directorio /data/local/tmp que es escribible sin ser root (por ejemplo, a través de adb). Allí puedes colocar un script y ejecutarlo directamente.

Nota: Se niega la lista de contenido de /data y /data/local para usuarios que no son root, pero en /data/local/tmp tienes permisos nuevamente.

0 votos

¡Gracias por tu respuesta! Ya he intentado /data/local/tmp y desafortunadamente no funcionó. Pero veo que sus permisos están establecidos como ejecutables, por lo que la respuesta a mi pregunta podría ser solo eso. Siempre he ejecutado mis scripts con sh script.sh. Si te entiendo correctamente, estás diciendo que ejecutar sh /storage/emulated/0/script.sh debería funcionar. Porque eso es lo que solía funcionar y de repente dejó de funcionar.

0 votos

@Zebiano /system/bin/sh /storage/emulated/0/script.sh definitivamente funciona en mi sistema Android 9 (sin ser root). ¿Quizás instalaste accidentalmente un segundo ejecutable de sh que ahora se está utilizando en lugar de /system/bin/sh?

0 votos

Acabo de intentarlo de nuevo en mi sistema y desafortunadamente no tuve suerte. Dudó que haya instalado un segundo porque ni siquiera sé cómo hacerlo. No he instalado nada en mi teléfono aparte de BusyBox. ¿Podría afectar algo cambiar entre Mac y Windows con adb?

1voto

Baljeet Verma Puntos 1

Estoy usando la aplicación Pydroid3 en la misma configuración del dispositivo.

sh script.sh parece funcionar en ella.

1voto

Estoy usando un Samsung A52 (SM-A525F/DS) con Termux instalado desde Google Play. El directorio principal, donde puedes escribir scripts y establecer el bit de ejecución, es:

/data/data /com.termux/files/home

No puedes navegar por este directorio desde un administrador de archivos en el teléfono, por lo que se necesita un método alternativo para colocar tus scripts allí. Yo he creado subdirectorios desde el directorio home de Termux, por lo que se ve así:

/data/data /com.termux/files/home/myname/scripts

Este es el único lugar donde puedes ejecutar scripts directamente usando:

./myscript.sh

aunque puedes llamar a bash en una nueva terminal y continuar sus comandos desde un archivo de texto, el cual no necesita ser ejecutable, como en:

bash myscript.sh

La primera línea de los scripts debe ser

#!/data/data/com.termux/files/usr/bin/bash

Termux proporciona enlaces a los directorios estándar DCIM, Download, Movies, Music, Pictures y uno al directorio principal de todos los anteriores, que es:

$HOME/storage/shared

Sin embargo, desde aquí, puedes acceder todos los directorios estándar con permisos de lectura y escritura (además de crear los tuyos propios, por supuesto). Aquí está la salida del comando tree ejecutado desde el directorio home en mi teléfono, lo cual lo explica mejor que palabras:

$HOME
 myname
   scripts
 storage
     dcim -> /storage/emulated/0/DCIM
     downloads -> /storage/emulated/0/Download
     movies -> /storage/emulated/0/Movies
     music -> /storage/emulated/0/Music
     pictures -> /storage/emulated/0/Pictures
     shared -> /storage/emulated/0
         Alarms
         Android
         Audiobooks
         DCIM
           Camera
           Screenshots
           mei
         Dashcam
         Documents
           Termux
           2024-02-02_scripts
         Download
           .scripts (Las últimas versiones van aquí usando get.sh/put.sh)
         GIFs
         Movies
           Whatsapp
           Downloaded_Videos
         Music
           Downloaded_MP3s
         Notes
         Notifications
         Podcasts
         Recordings
         Ringtones
27 directorios

Desde mi directorio de scripts he escrito scripts llamados get.sh y put.sh para ayudar a mover archivos entre mi PC y el teléfono, ya que es más fácil programar en la gran pantalla de una PC. Utilizo un directorio oculto en el directorio de Download llamado ".scripts" como el punto para acceder a los archivos tanto desde mi PC conectado por cable como desde Termux. Todo lo que tengo que hacer es hacerlos ejecutables una vez que estén en el directorio de scripts.

En Documents, transfiero copias de los scripts actuales, los archivos de configuración de Termux y mi $HOME/.profile en directorios llamados Termux y scripts. Así es como mantengo respaldos de archivos.

Espero que esto ayude a alguien.

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