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?

wdkrnls
fuente
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.

jch
fuente
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.

Ethan Bradford
fuente
¿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ó