Ich habe die folgenden zwei Codezeilen in meiner init.el-Datei:
(setq shell-file-name "bash")
(setq shell-command-switch "-ic")
Ich habe versucht, das folgende Skript auszuführen, um mithilfe des Shell-Skripts dmenu_path eine Liste der ausführbaren Dateien zu erhalten.
(defun dmenu-path-out ()
(shell-command-to-string "dmenu_path"))
Ich sehe folgenden Fehler:
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
[
0ad
...
Wie kann ich verhindern, dass bash diesen Fehler bei der Verwendung zurückgibt shell-command
?
shell-command
bash
wdkrnls
quelle
quelle
Antworten:
Das
-i
Flag fordert an, dass Bash im interaktiven Modus ausgeführt wird, für den ein Terminal erforderlich ist. Die Lösung besteht darin, dieshell-command-switch
Variable auf ihrem Standardwert zu belassen-c
.Wenn Sie Bash wirklich im interaktiven Modus ausführen müssen, müssen Sie es in einem Pseudoterminal ausführen, indem Sie
start-file-process
mitprocess-connection-type
bound to verwendent
.quelle
gnome-terminal
, läuftecho
und Blätter die Bash - Sitzung ausgeführt wird und bereit , neue Befehle zu nehmen:(start-file-process-shell-command "peekaboo" "*Messages*" "gnome-terminal -- bash -c 'echo Peekaboo!; bash'")
; Alle Ausgaben des Elisp-Befehls werden an den*Messages*
Puffer gesendet . Beachten Sie, dass ichstart-file-process-shell-command
anstelle von verwendet habestart-file-process
, sodass ich den Pfad zu Shell-Programmen nicht angeben muss.Haben Sie hinzugefügt
-i
, um Bash zu bekommen, um Aliase zu erweitern? Wenn ja, wie in /programming/12224909 angegeben , schließen Sie stattdessen einin deinen .emacs und
in Ihrem .bashrc. Ersteres bewirkt, dass Ihr .bashrc auf Ihren Sub-Shells ausgeführt wird, und letzteres ermöglicht die Alias-Erweiterung in Bash-Shells ohne Anmeldung.
Sie können dies verbessern, indem Sie ein separates Shell-Skript mit Ihren Aliasen und der shopt-Zeile erstellen und dieses als BASH_ENV-Wert verwenden. Das läuft möglicherweise schneller als Ihr vollständiger ~ / .bashrc.
quelle