Cómo crear y ejecutar scripts .sh en Termux para Android

  • Termux permite tener un entorno Linux completo en Android para ejecutar scripts .sh sin root.
  • Es clave configurar bien permisos de almacenamiento, shebang y ejecución para evitar errores de «permiso denegado».
  • Con los complementos de Termux se pueden lanzar scripts al inicio, desde widgets o al compartir archivos y enlaces.
  • Termux integra APIs de Android (notificaciones, audio, cámara, TTS) para automatizar casi cualquier tarea desde shell.

Script sh en Termux para Android

Si alguna vez has intentado instalar un APK, mover archivos y lanzar un script .sh en Android y solo has conseguido un molesto «permiso denegado», tranquilo, no eres el único. Android no es un Linux de escritorio al uso y, aunque comparten muchas bases, el sistema de permisos y rutas complica un poco las cosas.

En este artículo vamos a ver, paso a paso, cómo crear y ejecutar scripts .sh en Termux para Android, cómo solucionar problemas típicos de permisos, y cómo exprimir esta app para automatizar tareas al arrancar el dispositivo, al compartir enlaces o incluso desde widgets. Todo ello usando un lenguaje claro, ejemplos reales y trucos que te ahorrarán tiempo y quebraderos de cabeza.

Qué es Termux y por qué es ideal para scripts .sh en Android

Terminal Linux Termux en Android

Termux es una aplicación que te permite tener un entorno Linux completo dentro de Android, sin necesidad de root. No es solo un emulador de terminal: incorpora un gestor de paquetes tipo Debian/Ubuntu, con el que puedes instalar Python, Ruby, Node.js, gcc, ssh, servidores web, bases de datos y un largo etcétera.

Lo interesante para nuestro caso es que Termux ofrece una shell real (bash, zsh…), soporte para scripts, atajos de teclado, ratón y un sistema de paquetes muy parecido al de una distro clásica. Vamos, que puedes usarlo para programar, administrar servidores, o simplemente automatizar tu Android con scripts .sh.

Desde el primer arranque verás que puedes utilizar comandos útiles de Termux como ls, grep, nano, vim, htop, git, python, etc. Eso sí, la jerarquía de directorios no es exactamente igual que en un Linux de escritorio, y este detalle es crucial cuando hablamos de scripts.

Además, Termux soporta teclados físicos y atajos especiales. Por ejemplo, la tecla de bajar volumen hace de tecla Ctrl para poder usar combinaciones como Ctrl+C, Ctrl+D o Ctrl+L, lo que hace la experiencia mucho más cómoda en un móvil o tablet.

Termux
Termux
Developer: Fredrik Fornwall
Price: Free

Instalar Termux correctamente y evitar conflictos de versiones

Instalación de Termux en Android

Uno de los problemas que se comentan a menudo es que, tras instalar Termux, no aparece el icono de la app o da errores raros. Muchas veces eso pasa por instalar versiones antiguas o mezcladas entre Google Play y F-Droid.

La recomendación actual es que instales Termux desde una única fuente fiable. Normalmente se aconseja usar F-Droid, donde está la versión mantenida, o en su defecto la versión oficial de GitHub. Si eliges F-Droid, descarga el APK de Termux directamente y evita mezclarlo con la versión de Play Store.

Esto es especialmente importante si vas a utilizar complementos como Termux:Boot, Termux:API o Termux:Widget. Si necesitas una guía, aprende a usar Termux. Todas las apps relacionadas deben venir de la misma tienda (Play Store o F-Droid) para que la firma digital coincida. Si mezclas orígenes, muchas veces las extensiones no detectan Termux o simplemente no funcionan.

En caso de que ya tengas Termux de la Play Store y quieras pasar a F-Droid, lo recomendable es desinstalar primero la versión anterior y luego instalar tanto Termux como sus plugins desde F-Droid, todo del mismo sitio.

Configurar el entorno básico: actualización y permisos de almacenamiento

Una vez instalado Termux, lo primero es dejarlo mínimamente preparado para trabajar con scripts y archivos del dispositivo. Para ello hay dos pasos clave: actualizar los paquetes e integrar el almacenamiento de Android.

Actualizar la «distro» de Termux es tan sencillo como usar el gestor de paquetes. En lugar de usar directamente apt, Termux ofrece el comando pkg, que simplifica el proceso y se encarga de hacer apt update cuando toca.

El segundo paso es dar acceso al almacenamiento del móvil. Por defecto, Termux solo ve su propio directorio $HOME, que está aislado del resto de Android. Si quieres leer y escribir en la memoria interna o en la SD, debes ejecutar:

termux-setup-storage

Este comando te pedirá permisos y creará un directorio $HOME/storage con enlaces a downloads, documents, pictures, etc. De este modo, tus scripts podrán leer y copiar archivos hacia y desde la zona de usuario de Android sin tener que hacer malabares.

Si lo que quieres es, por ejemplo, instalar un APK y copiar algunos archivos desde un script, es fundamental haber dado estos permisos antes. De lo contrario, casi seguro que te encontrarás con el temido «Permission denied» al acceder a rutas de la memoria interna.

Entender la estructura de rutas en Termux y el tema del shebang

Termux no usa exactamente la misma jerarquía que una distro Linux estándar. Rutas como /bin, /usr o /etc no están donde esperas, y eso afecta a los shebang de los scripts (la línea que empieza por #! indicando el intérprete).

En muchas guías o proyectos (como bots para Instagram tipo InstaPy) verás scripts con cabeceras del estilo #!/bin/sh o #!/usr/bin/env python. En versiones antiguas de Termux era necesario «arreglar» esas rutas con una utilidad llamada termux-fix-shebang, porque los binarios no estaban en las rutas típicas.

Las versiones recientes incluyen el paquete termux-exec, que se encarga de interpretar correctamente shebangs estándar. Gracias a esto, la mayoría de scripts que esperarían un entorno Unix clásico funcionan sin tocar nada. Aun así, si un script falla al ejecutarse, conviene revisar:

  • Que el shebang apunte a un intérprete que realmente exista en Termux.
  • Que el script tenga permisos de ejecución con chmod +x.
  • Que estás usando la ruta correcta al ejecutarlo (por ejemplo ./install.sh o ~/script.sh).

Si eres muy de tenerlo todo «ordenadito», puedes crear una estructura de directorios clásica en Termux (como /usr/bin) mediante comandos específicos que generan enlaces simbólicos y rutas estándar. No es obligatorio, pero a veces facilita reutilizar scripts heredados.

Crear, dar permisos y ejecutar un script .sh en Termux

Vamos al lío: ¿cómo se crea y lanza un script .sh simple en Termux? El flujo básico es siempre el mismo: escribir el script, guardar, dar permisos y ejecutar. Lo puedes aplicar tanto a un script propio como, por ejemplo, al clásico install.sh de proyectos como InstaPy Quickstart.

Para crear un script puedes usar nano, vim, emacs o el editor que más te guste. Si no tienes ninguno instalado, un primer paso útil es:

pkg install nano

Supongamos que quieres crear ~/script.sh. Podrías hacer:

nano ~/script.sh

Dentro del archivo escribes tu script, por ejemplo uno muy sencillo que deje constancia de la fecha de ejecución:

#!/bin/sh
echo "Encendido del dispositivo: $(date)" >> ~/registros.log

Cuando termines, guardas en nano con Ctrl + O, Enter y luego Ctrl + X. Ya tienes el script creado, pero todavía no es ejecutable. Para resolverlo, añade permisos con:

chmod +x ~/script.sh

A partir de ahí puedes probar si todo funciona ejecutando:

~/script.sh

./script.sh (si estás en el mismo directorio que el archivo)

Si al hacer esto se actualiza ~/registros.log con la fecha y hora, tienes la confirmación de que el script .sh funciona correctamente. Esta misma receta se aplica al intentar correr un install.sh que descargues de GitHub: asegúrate de que tiene permisos de ejecución y que lo llamas con la ruta adecuada.

Solucionar el error «permiso denegado» al ejecutar scripts .sh

Uno de los quebraderos de cabeza más habituales cuando alguien intenta instalar un APK o mover archivos mediante un .sh en Android es que todo parezca correcto pero la terminal responda con «Permission denied». En Termux, este problema suele tener varias causas típicas.

La primera y más obvia es que al script le falten permisos de ejecución. Aunque tengas puesto el shebang perfecto, sin un chmod +x archivo.sh no hay nada que hacer. Es un clásico descuido que conviene comprobar siempre.

Otra causa frecuente es que el script intente escribir en rutas del sistema donde Android no le deja, sobre todo sin root. Olvídate de manipular libremente directorios de sistema; céntrate en rutas de usuario (como las que expone $HOME/storage) o en lo que la propia app pueda gestionar.

También puede ocurrir que estés lanzando los comandos desde un emulador de terminal distinto a Termux, sin los permisos ni el entorno adecuados. Muchos otros emuladores de terminal en Android arrastran problemas de permisos y no integran tan bien el almacenamiento ni las APIs, lo que hace que los mismos comandos que en un Linux real funcionan, ahí fallen.

En el caso concreto de alguien que intenta instalar InstaPy Quickstart en Android, el punto crítico es que Termux debe tener disponibles todas las dependencias (Python, pip, librerías necesarias) y el script install.sh debe correr dentro de Termux, no en otra app aleatoria. Si lo ejecutas correctamente y aun así falla, revisa las rutas de instalación, el shebang y los permisos de los directorios de destino.

Ejecutar scripts .sh automáticamente al arrancar Android con Termux:Boot

Una vez dominado lo básico, mucha gente quiere ir un paso más allá y hacer que ciertos scripts se ejecuten automáticamente al encender el dispositivo. Para esto existe el complemento Termux:Boot.

Termux:Boot es una app que se integra con Termux y lanza todos los scripts .sh que encuentre en un directorio especial cuando el móvil termina de arrancar. Es ideal, por ejemplo, para iniciar servicios como MySQL, pequeños demonios, tareas de registro o cualquier automatización que necesites al encendido.

Puedes obtener Termux:Boot desde Google Play (de pago en algunos países) o desde F-Droid, donde está disponible de forma gratuita. Eso sí, recuerda la regla de oro: Termux y Termux:Boot deben venir del mismo sitio para que sus firmas coincidan. Si usas F-Droid para Termux, usa también F-Droid para Termux:Boot.

Tras instalar Termux:Boot, normalmente basta con abrir la app una vez para que se registre como receptor del evento de arranque. No hace falta configurarla a fondo; su magia ocurre en segundo plano leyendo los scripts que tú coloques en el directorio adecuado.

Ruta de scripts al inicio: ~/.termux/boot y ejemplo práctico

El mecanismo de Termux:Boot es sencillo: todo script .sh que pongas dentro de ~/.termux/boot/ se ejecutará al inicio del dispositivo. La carpeta no existe por defecto, así que tendrás que crearla tú mismo.

Para ello, en Termux ejecutas:

mkdir -p ~/.termux/boot/

A partir de ahí, puedes crear directamente tus scripts dentro de esa ruta o copiar los que ya tienes. Siguiendo el ejemplo anterior, si habíamos creado ~/script.sh, podríamos copiarlo así:

cp ~/script.sh ~/.termux/boot/script.sh

Mientras el archivo tenga permisos de ejecución (chmod +x ~/.termux/boot/script.sh), Termux:Boot lo lanzará en cada arranque. Ese script puede contener cualquier comando válido para bash/sh, desde escribir en un log hasta iniciar un servicio de base de datos con algo como:

mysqld_safe -u root &

Si quieres asegurarte de que todo está bien configurado, es buena idea abrir de nuevo la app Termux:Boot unos segundos, cerrar, y luego reiniciar el dispositivo. Al encender, comprueba el contenido de tu archivo de registros o el estado de los servicios que has intentado arrancar desde el script.

Usar cron y otras automatizaciones con Termux

Además del arranque del sistema, también puedes programar tareas periódicas con cron en Termux. Para ello necesitas instalar el paquete correspondiente y configurar tus crontabs como lo harías en cualquier Linux.

Una vez instalado, usas crontab -e para editar la tabla de cron y añadir entradas. Por ejemplo, podrías configurar un trabajo que se ejecute cada minuto y cree o actualice un directorio concreto, o que lance un script .sh con cierta cadencia.

El funcionamiento de cron en Termux es muy similar al de un Linux estándar, pero tiene una limitación importante: si Android mata la app de Termux en segundo plano, las tareas podrían dejar de ejecutarse. Mientras el sistema respete el proceso, cron funciona muy bien, pero conviene tenerlo en cuenta en móviles con agresivas políticas de ahorro de batería.

Si no tienes clara la sintaxis de cron (las expresiones de minuto, hora, día, etc.), puedes apoyarte en recursos como crontab.guru, que te ayudan a escribir la programación correcta de forma visual.

Integrar Termux con Android: Termux:API y scripts al compartir

Uno de los grandes puntos fuertes de Termux es que no se queda solo en una terminal aislada: con el complemento Termux:API puedes acceder a muchas funciones de hardware de Android y combinarlas con tus scripts .sh, y también con herramientas como SL4A en Android.

Para usarlo, primero instalas la app Termux:API desde F-Droid o Play Store (siguiendo la misma política de orígenes que con el resto de plugins) y después instalas en la terminal el paquete termux-api. A partir de ahí, tus scripts pueden llamar a comandos como:

  • termux-notification para mostrar notificaciones en Android.
  • termux-dialog para abrir cuadros de diálogo y pedir datos al usuario.
  • termux-toast para mostrar mensajes breves en pantalla.
  • termux-tts-speak para usar el TTS (texto a voz) de Google.
  • termux-media-player para reproducir audio/vídeo.
  • termux-microphone-record para grabar audio desde el micro.
  • Comandos para portapapeles, ubicación, cámara, etc.

Además, Termux puede capturar ciertos «intents» de Android, lo que permite ejecutar scripts automáticamente al compartir archivos o URLs desde otras apps.

Por ejemplo, si compartes un enlace desde YouTube hacia Termux, se ejecutará el script ~/bin/termux-url-opener recibiendo la URL en la variable $1. Solo tienes que:

  • Crear el directorio ~/bin si no existe.
  • Crear el archivo termux-url-opener dentro de él.
  • Dar permisos de ejecución con chmod +x ~/bin/termux-url-opener.

Dentro de ese script puedes hacer, por ejemplo, que se descargue el vídeo con youtube-dl o similares usando la URL que llega en $1, o que guarde el enlace en una lista para leer más tarde.

Algo parecido ocurre con termux-file-editor: cuando compartes un archivo con Termux, se lanza ese manejador. Puedes configurarlo para abrir tu editor favorito creando un enlace simbólico como:

ln -s $PREFIX/bin/nvim ~/bin/termux-file-editor

O bien escribir tu propio script termux-file-editor (con nano, marcarlo como ejecutable, etc.) para procesar el archivo de la forma que quieras. Es una forma muy potente de encadenar acciones entre Android y tus scripts .sh.

Ejecutar scripts desde widgets y accesos directos: Termux:Widget

Si te gusta la comodidad, hay otro complemento especialmente útil: Termux:Widget. Este plugin permite crear accesos rápidos en la pantalla de inicio para ejecutar scripts directamente desde un widget, sin abrir la terminal manualmente cada vez.

Para que funcione, debes colocar tus scripts en rutas concretas:

  • ~/.shortcuts/ para scripts que aparecerán en el widget.
  • ~/.shortcuts/tasks/ para tareas específicas gestionadas por el plugin.
  • ~/.shortcuts/icons/ para los iconos PNG que se mostrarán con cada script.

El nombre del archivo de icono debe coincidir con el nombre del script añadiendo .png, por ejemplo script.sh.png. En una pantalla Full HD típica, un tamaño de 96×96 px suele ir bien, aunque para pantallas más grandes puede convenir subir a 144px o 196px.

Solo con colocar el script en ~/.shortcuts/, darle permisos de ejecución y añadir el widget de Termux en tu launcher, podrás lanzar ese .sh con un simple toque. Perfecto para tareas que repites a menudo: copias de seguridad, sincronizaciones, notas de voz, etc.

Otras herramientas y casos de uso avanzados con Termux

Más allá de ejecutar scripts sueltos, Termux permite tener un entorno de trabajo sorprendentemente completo en Android. Puedes instalar intérpretes de lenguajes como Python, Ruby, Perl, Node.js o Rust y usarlos junto con tus scripts .sh para automatizar cosas más complejas.

También puedes montar entornos de desarrollo completos con git, gcc, make, Neovim, Emacs, etc., e incluso servidores web, servidores de bases de datos o servicios SSH. Muchos usuarios llevan sus dotfiles en un repositorio git para clonar su configuración directamente en Termux y sentirse «como en casa» en cualquier dispositivo Android.

Si utilizas gestores de contraseñas tipo pass, puedes instalarlos junto con gnupg y sincronizar tus contraseñas vía git, lo que te permite tenerlas disponibles también en el móvil. Incluso herramientas como fish (un shell muy amigable) y utilidades modernas como zoxide, starship, ripgrep, lsd, bat o atuin se integran sin problemas.

Para quienes vienen de escritorio, la idea de tener un servidor SSH o un servidor web corriendo en el teléfono no es ninguna locura con Termux. Lo puedes arrancar con un simple script .sh, enlazarlo a Termux:Boot o a un widget, y gestionarlo como si fuera un pequeño servidor portátil.

El soporte para interfaces gráficas vía X11 y VNC también está disponible, aunque requiere una configuración más avanzada; si te interesa, consulta cómo emular y ejecutar Linux en Android. Aun así, demuestra hasta qué punto Termux supera la simple idea de «emulador de terminal» y se convierte en una pequeña distro Linux dentro de Android.

Con todo esto, Termux se convierte en una especie de navaja suiza: desde instalar un simple APK con un script .sh hasta automatizar tareas complejas combinando APIs de Android, cron, arranque del sistema y widgets, prácticamente cualquier cosa que te imagines que harías en una terminal Linux la puedes llevar al bolsillo.

Cómo dominar Termux de Android
Artículo relacionado:
Termux a fondo: cómo dominar este terminal de Android