Error "no se puede establecer el grupo de proceso de terminal" al ejecutar el script bash


13

Tengo las siguientes dos líneas de código en mi archivo init.el:

(setq shell-file-name "bash")
(setq shell-command-switch "-ic")

Intenté ejecutar el siguiente script para obtener una lista de ejecutables utilizando el script de shell dmenu_path.

(defun dmenu-path-out ()
  (shell-command-to-string "dmenu_path"))

Veo el siguiente error:

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
[
0ad
...

¿Cómo puedo evitar que bash devuelva ese error cuando lo uso shell-command?


Posiblemente una pregunta duplicada parcial de stackoverflow.com/questions/9670209/… parece que aún no hay solución si su shell es la fiesta de Cygwin
— Julio

Respuestas:


10

El -iindicador solicita que Bash se ejecute en modo interactivo, lo que requiere un terminal. La solución es dejar la shell-command-switchvariable en su valor predeterminado, que es justo -c.

Si realmente necesita ejecutar Bash en modo interactivo, deberá ejecutarlo en un pseudo-terminal, mediante el uso start-file-processde process-connection-typeLinked to t.


Esto no funcionó para mí.
— Didier A.

Esto funciona para mi. Como ejemplo, este comando se inicia gnome-terminal, ejecuta echoy deja la sesión de Bash en ejecución y lista para tomar nuevos comandos (start-file-process-shell-command "peekaboo" "*Messages*" "gnome-terminal -- bash -c 'echo Peekaboo!; bash'"):; cualquier salida del comando Elisp se envía al *Messages*búfer. Tenga en cuenta que usé en start-file-process-shell-commandlugar de start-file-process, por lo que no necesito dar la ruta a los programas de shell.
— Arch Stanton

0

¿Agregaste -ipara obtener bash para expandir alias? Si es así, como se indica en /programming/12224909 , incluya

(setenv "BASH_ENV" "~/.bashrc")

en tus .emacs y

shopt -s expand_aliases

en tu .bashrc. El primero hace que su .bashrc se ejecute en sus shells secundarios, y el segundo permite la expansión de alias en shells bash sin inicio de sesión.

Puede ir mejor creando un script de shell separado con sus alias y la línea shopt, y usándolo como el valor BASH_ENV; eso puede correr más rápido que tu ~ / .bashrc completo.


¿Puede resumir la solución detallada allí? De lo contrario, esta es esencialmente una respuesta de solo enlace y, por lo tanto, corre el riesgo de ser eliminada.
— Dibujó
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.