1 votos

Termux: Widget y Emacs: no se pueden iniciar subprocesos

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.

1voto

ice cream Puntos 919

He resuelto esto mientras yo estaba tratando de ser cuidadoso al escribir la pregunta: fue en la documentación, yo no podía entenderlo. Necesitaba establecer LD_PRELOAD, como se documenta por termux-exec, para que Emacs se ejecuta con la versión modificada de la exec() llamada al sistema. Mis dos líneas de secuencia de comandos es ahora

PREFIX=/data/data/com.termux/files/usr
TERMUX_EXEC=${PREFIX}/lib/libtermux-exec.so
[ -e $TERMUX_EXEC ] && export LD_PRELOAD=$TERMUX_EXEC
filename=$(a little shell logic)
emacs $filename

El extra existencia de comprobación de resto es lo que LD_PRELOAD sigue siendo unset (o sin modificar) donde puedo ejecutar esta misma conveniente script en mi no Termux sistemas.

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