Errore "impossibile impostare il gruppo di processi terminal" durante l'esecuzione dello script bash


13

Ho le seguenti due righe di codice nel mio file init.el:

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

Ho provato a eseguire il seguente script per ottenere un elenco di eseguibili utilizzando lo script shell dmenu_path.

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

Vedo il seguente errore:

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

Come posso impedire a bash di restituire quell'errore durante l'utilizzo shell-command?


Domanda duplicata, forse parziale, di stackoverflow.com/questions/9670209/… sembra che non ci sia ancora soluzione se la tua shell è la bash di cygwin
julio

Risposte:


10

Il -iflag richiede l'esecuzione di Bash in modalità interattiva, che richiede un terminale. La soluzione è lasciare la shell-command-switchvariabile al suo valore predefinito, che è giusto -c.

Se hai davvero bisogno di eseguire Bash in modalità interattiva, dovrai eseguirlo in uno pseudo-terminale, usando start-file-processcon process-connection-typeassociato a t.


Questo non ha funzionato per me.
Didier A.

Per me funziona. Ad esempio, questo comando avvia gnome-terminal, esegue echoe lascia la sessione di Bash in esecuzione e pronta ad accettare nuovi comandi (start-file-process-shell-command "peekaboo" "*Messages*" "gnome-terminal -- bash -c 'echo Peekaboo!; bash'"):; qualsiasi output dal comando Elisp viene inviato al *Messages*buffer. Nota che ho usato start-file-process-shell-commandinvece di start-file-process, quindi non ho bisogno di dare il percorso ai programmi di shell.
Arch Stanton,

0

Hai aggiunto -iper ottenere bash per espandere gli alias? In tal caso, come indicato in /programming/12224909 , includere invece

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

nei tuoi .emacs e

shopt -s expand_aliases

nel tuo .bashrc. Il primo fa funzionare il tuo .bashrc sulle tue sub-shell, mentre il secondo consente l'espansione dell'alias nelle shell bash non di accesso.

Puoi andare ancora meglio creando uno script shell separato con i tuoi alias e la riga shopt e utilizzandolo come valore BASH_ENV; che potrebbe essere più veloce del tuo ~ / .bashrc completo.


Puoi riassumere la correzione qui dettagliata? Altrimenti questa è essenzialmente una risposta solo link e quindi rischia di essere eliminata.
Disegnò
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.