Tengo algunas tareas que me gusta hacer uso de Emacs en varios sistemas operativos diferentes. He estado usando Termux para que yo pueda acceder a estas tareas en mi teléfono Android. Para reducir la creación de escribir en el archivo de edición de parte de este flujo de trabajo, he instalado Termux:Widget y por escrito de dos líneas widget script que hace
filename=$(a little shell logic)
emacs $filename
Así que ahora mi teléfono tiene un botón en la pantalla de inicio que puedo empujar y abre el archivo que quiero en el editor. Que parte todo funciona bien.
Con frecuencia, una vez que he empezado a editar, es conveniente ejecutar un script de shell. Es agradable ser capaz de ejecutar la secuencia de comandos de shell en un buffer de Emacs para que yo pueda utilizar de forma regular búfer de conmutación de comandos para interactuar con él. Si abro un nuevo Termux sesión y escriba emacs
en el símbolo del sistema, entonces que puedo hacer M-x async-shell-command
, el uso relativo de los nombres de archivo y la tecla tab para buscar el nombre de la secuencia de comandos que quiero (por ejemplo ../my-script.sh
), y ejecutar desde dentro de Emacs. Esa parte funciona bien.
Sin embargo, si he empezado a Emacs de Termux:Widget, Emacs es incapaz de spawn de los subprocesos. Obtengo errores como
/data/data/com.termux/files/usr/bin/sh: 1: ../my-script.sh: not found
/data/data/com.termux/files/usr/bin/sh: 1: /data/data/com.termux/files/home/whatever/my-script.sh: not found
Creo que la relativa y absoluta de los nombres de ruta de acceso es correcta porque estoy utilizando el autocompletado para que los revise antes de pedir a ejecutar.
Esto parece el tipo de problema que termux-exec fue inventado para solucionar. Sin embargo, no funciona por arte de magia, y me estoy encontrando a mí mismo confundidos por la documentación.