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
?
shell-command
bash
wdkrnls
la source
la source
Réponses:
L'
-i
indicateur demande que Bash s'exécute en mode interactif, ce qui nécessite un terminal. La solution est de laisser lashell-command-switch
variable à 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-process
avecprocess-connection-type
lié àt
.la source
gnome-terminal
, exécuteecho
et 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é à lastart-file-process-shell-command
place destart-file-process
, donc je n'ai pas besoin de donner le chemin aux programmes shell.Avez-vous ajouté
-i
pour que bash développe des alias? Si oui, comme indiqué dans /programming/12224909 , incluez plutôtdans votre .emacs et
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.
la source