Erreur «impossible de définir le groupe de processus du terminal» lors de l'exécution du script bash


13

J'ai les deux lignes de code suivantes dans mon fichier init.el:

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

J'ai essayé d'exécuter le script suivant pour obtenir une liste d'exécutables à l'aide du script shell dmenu_path.

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

Je vois l'erreur suivante:

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

Comment puis-je empêcher bash de renvoyer cette erreur lors de l'utilisation shell-command?


Question en double peut-être partielle de stackoverflow.com/questions/9670209/… il ne semble pas encore y avoir de solution si votre shell est bash de cygwin
julio

Réponses:


10

L' -iindicateur demande que Bash s'exécute en mode interactif, ce qui nécessite un terminal. La solution est de laisser la shell-command-switchvariable à sa valeur par défaut, qui est juste -c.

Si vous avez vraiment besoin d'exécuter Bash en mode interactif, vous devrez l'exécuter dans un pseudo-terminal, en utilisant start-file-processavec process-connection-typelié à t.


Ça n'a pas marché pour moi.
Didier A.

Ça marche pour moi. Par exemple, cette commande lance gnome-terminal, exécute echoet laisse la session Bash en cours d'exécution et prête à accepter de nouvelles commandes (start-file-process-shell-command "peekaboo" "*Messages*" "gnome-terminal -- bash -c 'echo Peekaboo!; bash'"):; toute sortie de la commande Elisp est envoyée au *Messages*tampon. Notez que j'ai utilisé à la start-file-process-shell-commandplace de start-file-process, donc je n'ai pas besoin de donner le chemin aux programmes shell.
Arch Stanton

0

Avez-vous ajouté -ipour que bash développe des alias? Si oui, comme indiqué dans /programming/12224909 , incluez plutôt

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

dans votre .emacs et

shopt -s expand_aliases

dans votre .bashrc. Le premier entraîne l'exécution de votre .bashrc sur vos sous-shells, et le second permet l'expansion d'alias dans les shells bash sans connexion.

Vous pouvez faire mieux en créant un script shell séparé avec vos alias et la ligne shopt, et en l'utilisant comme valeur BASH_ENV; qui peut s'exécuter plus rapidement que votre ~ / .bashrc complet.


Pouvez-vous résumer le correctif détaillé ici? Sinon, il s'agit essentiellement d'une réponse uniquement liée à un lien et risque donc d'être supprimée.
Drew
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.