Fehler „Terminalprozessgruppe kann nicht festgelegt werden“ beim Ausführen des Bash-Skripts

13

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?

wdkrnls
quelle
Möglicherweise teilweise doppelte Frage von stackoverflow.com/questions/9670209/… Es scheint noch keine Lösung zu geben, wenn Ihre Shell Cygwins Bash ist
Juli

Antworten:

10

Das -iFlag fordert an, dass Bash im interaktiven Modus ausgeführt wird, für den ein Terminal erforderlich ist. Die Lösung besteht darin, die shell-command-switchVariable 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-processmit process-connection-typebound to verwenden t.

jch
quelle
Das hat bei mir nicht funktioniert.
Didier A.
Für mich geht das. Als Beispiel dieser Befehl startet gnome-terminal, läuft echound 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 ich start-file-process-shell-commandanstelle von verwendet habe start-file-process, sodass ich den Pfad zu Shell-Programmen nicht angeben muss.
Arch Stanton
0

Haben Sie hinzugefügt -i, um Bash zu bekommen, um Aliase zu erweitern? Wenn ja, wie in /programming/12224909 angegeben , schließen Sie stattdessen ein

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

in deinen .emacs und

shopt -s expand_aliases

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.

Ethan Bradford
quelle
Können Sie bitte den dort beschriebenen Fix zusammenfassen? Andernfalls handelt es sich im Wesentlichen um eine Nur-Link-Antwort und es besteht die Gefahr, dass diese gelöscht wird.
Drew