'M-x term' mit Emacs unter MS Windows: error Launender untergeordneter Prozess: ungültiges Argument

8

Immer wenn ich versuche, M-x Begriff aus meiner Windows-Distribution von GNU Emacs zu starten, bekomme ich den Fehler:

%Vor%

nach dem Akzeptieren des Standardprogramms zur Ausführung (entweder "bash.exe" oder "zsh.exe" von Cygwin und in meiner Umgebungsvariablen Windows PATH vorhanden).

M-x-Shell funktioniert mit Zsh / Bash von Cygwin. Aber ich möchte Term verwenden, um weitere Funktionen zu erhalten ...

Irgendwelche Hilfe?

    
fniessen 28.11.2013, 10:03
quelle

4 Antworten

6

Aus meiner Erfahrung wird keiner der Terminal-Emulatoren in Emacs (Begriff, Ansi-Term, Multi-Term) unter Windows unterstützt. Es sieht so aus, als ob der Hauptgrund ist, dass alle auf Low-Level-Unterstützung für Terminals (Stty usw.) angewiesen sind, die nicht von Windows bereitgestellt werden. Versuche, Emacs zu zwingen, sagen wir Cygwin bash zu verwenden, indem wir Referenzen auf z.B. / bin / sh in term.el hilft auch nicht. Es kann in Cygwin Emacs funktionieren, aber ich habe es schon lange nicht mehr benutzt, weil der native W32 Emacs so viel besser ist (für mich). Der Shell-Modus funktioniert entweder mit Cygwin bash oder mit Windows cmd (über cmdproxy, das Teil von Emacs install ist). Sie können Unterstützung für ANSI-Farben haben, wenn Sie

tun %Vor%

Ich habe es viele Male versucht, aber am Ende benutze ich den Shell-Modus mit bash, weil ich dazu neige, Pipes und Umleitungen zu benutzen. Gibt es bestimmte Anwendungen, die Sie verwenden möchten, die eine vollständige Terminal-Unterstützung benötigen? Ich habe zuerst top vermisst, aber dann habe ich gerade M-x proced benutzt.

UPDATE: term , ansi-term und multi-term tun arbeiten in Cygwin Emacs.

    
Alex Vorobiev 01.12.2013, 22:09
quelle
4

Dies ist ein Versuch, eine allgemeinere Antwort über die Nachricht "Kindprozess erstellen: ungültiges Argument" aufzunehmen, die in verschiedenen Situationen erzeugt wird. Ich benutze Emacs 25.0.50.1 auf Windows 7, aber ich habe das schon früher mit früheren Versionen untersucht und ich denke nicht, dass sich irgendetwas Relevantes geändert hat. Aus irgendeinem Grund startet dieser Fehler den Debugger nicht, auch wenn debug-on-error festgelegt ist. Es scheint jedoch, dass der Fehler immer von der Funktion start-process in subr.el (im obersten Lisp-Verzeichnis) generiert wird. Sie können daher M-x debug-on-entry RET start-process RET eingeben und dann alles tun, was den Fehler verursacht hat. Emacs zeigt dann einen Backtrace-Puffer an, dessen zweite Zeile die Argumente zeigt, die an start-process übergeben wurden. Das letzte Argument soll der Name einer ausführbaren Datei sein. In allen Fällen, in denen ich den Fehler "Fehlerhafter untergeordneter Prozess: ungültiges Argument" gesehen habe, war die ausführbare Datei nicht vorhanden. Sie müssen dann herausfinden, woher emacs den Dateinamen hat und wie Sie ihn ändern können. Sie können einige Hinweise vom Rest des Backtrace-Puffers erhalten.

Im Falle des Befehls M-x term ist die verwendete ausführbare Datei die erste der folgenden Sachen, die einen Nicht-Null-Wert hat:

  • Die Lisp-Variable explicit-shell-file-name (die Sie nach Eingabe von C-h v RET explicit-shell-file-name RET anpassen können)
  • Die Umgebungsvariable ESHELL
  • Die Umgebungsvariable SHELL
  • Der fest codierte Wert /bin/sh

(Sie können dies sehen, indem Sie sich den Code in term.el im obersten Lisp-Verzeichnis ansehen.)

    
Neil Strickland 17.09.2015 11:34
quelle
2

Wenn ich im Quelltext von term.el nachschaue, kann ich ein fest codiertes "/ bin / sh" sehen, das benutzt wird, um das Programm zu starten (das in Ihrem Pfad existiert). Wenn Sie eine Kopie Ihrer bash.exe an genau diesem Ort und Namen erstellen können (ich bin mir nicht sicher, ob Windows-Cygwin-Pfade das erlauben), könnten Sie Glück haben.

    
juanleon 28.11.2013 10:26
quelle
2

Ich habe versucht, M-x term von einer MingW64 emacs mit einer MSYS2 bash.exe auszuführen, und ich habe den gleichen Fehler wie Sie bekommen. Es ist möglich, ein wenig weiter zu kommen, indem term-exec-1 in term.el geändert wird, um zu lesen:

%Vor%

Sie müssen mit dem MSYS2-Shell-Pfad antworten, der so etwas wie /usr/bin/bash.exe ist, und dann erhalten Sie ein Terminal. Das Problem ist, dass das Terminal durcheinander ist. Der stty-Befehl funktioniert nicht und der cr funktioniert nicht. Außerdem erhält die Funktion cd emacs MSYS2-Pfade wie /c/usr/share/emacs/ , die nicht gültig sind. Diese Funktion muss angewiesen werden, diese Pfade in Windows-Pfade umzuwandeln.

    
FabPop 06.04.2017 19:30
quelle

Tags und Links