Führen Sie das C-Programm in Mintty über die Windows-Befehlszeile aus

907
Dimpl

Ich möchte ein C-Programm in mintty ausführen und den stderrAusgabestrom in eine Datei debug.txt umleiten. Dies kann erreicht werden mit:

./zombie_jump 2>debug.txt 

Ich habe jedoch Probleme mit der Windows-Befehlszeile.

mintty -s 70,55 ./zombie_jump 2>debug.txt 

verhält sich so, als ob der 2>debug.txtBefehl weggelassen wurde (das Programm wird ausgeführt, der Fehlerstrom jedoch nicht umgeleitet), und

mintty -s 70,55 "./zombie_jump 2>debug.txt" 

verhält sich so, als würde ich "./zombie_jump 2> debug.txt" senden und den Fehler erzeugen Failed to run ./zombie_jump 2>debug.txt: No such file or directory.

Welchen Befehl sollte ich verwenden?

Bearbeiten:

mintty -s 70,55 './zombie_jump 2>debug.txt' 

gibt zurück Failed to run ./zombie_jump : No such file or directoryund erstellt eine Datei namens debug.txt'.

0
Das Problem scheint zu sein, dass `mintty` separate Parameter für den Befehl benötigt, der ausgeführt wird. Daher müssen Sie die Umleitung angeben. Ohne Anführungszeichen gilt die Weiterleitung für `mintty` selbst, wodurch neue Standard-E / A-Pfade eingerichtet werden. Wenn Sie die Umleitung in die gleichen Anführungszeichen wie den Befehl aufnehmen, wird dies zum gesamten Befehl, der nach einem einzelnen Namen mit eingebetteten Leerzeichen und Umleitungszeichen sucht. Einzelne Anführungszeichen haben in `cmd` keine besondere Bedeutung, daher Ihre letzte Feststellung. AFH vor 8 Jahren 0
Zwei Vorschläge: `mintty -s 70,55 ./zombie_jump" 2> debug.txt "`, um die Weiterleitung in `cmd 'zu stoppen; Wenn dies fehlschlägt, erstellen Sie `. / zombie_noerrs` mit` ./zombie_jump 2> debug.txt` und führen Sie `mintty -s 70,55. / zombie_noerrs` aus. AFH vor 8 Jahren 0
Leider funktioniert der erste Vorschlag nicht, das gleiche Ergebnis wie mein zweiter Versuch. Die zweite ist auch nicht optimal, da ich versuche, einen Befehl zu finden, den ich mit Sublime Text 2 verwenden kann, um die aktuelle Datei auszuführen, an der ich gerade arbeite. Dimpl vor 8 Jahren 0

1 Antwort auf die Frage

1
Daniel B

Der Fehler hier ist sehr einfach zu verstehen: minttyLeiten Sie Ihre Programme nicht an (vermutlich) weiter cmd, wo die Ausgabeumleitung eingerichtet ist. Stattdessen wird die Ausgabe in einem eigenen GUI-Fenster angezeigt. Das ist es, wofür ein Terminal-Emulator entwickelt wurde. :)

Die Ausgabeumleitung ist eine Shell-Funktion. Wenn Sie nur laufen mintty my_command, verwenden Sie überhaupt keine Shell. Stattdessen wird minttydirekt gestartet my_command.

Wenn Sie zitieren "my_command 2>out.err", fordern Sie minttynach einem Befehl für diesen (vollständigen) Namen. Es ist gleichbedeutend mit der Eingabe "my_command 2>out.err"in eine reguläre Linux-Shell. Funktioniert nicht so oder so.

Nun, da wir festgestellt haben, dass es sich um eine Shell-Funktion handelt, ist es klar, dass wir eine Shell brauchen. Eine übliche Wahl wäre Bash. Bash kann eine Befehlszeichenfolge übergeben werden, die beim Start wie folgt ausgeführt wird:

bash -c "my_command 2>out.err" 

Das bedeutet, dass wir es so verwenden können mit mintty:

mintty /bin/bash -c "my_command 2>out.err" 

Auf diesem Computer erbt die auf diese Weise gestartete Cygwin Bash-Shell das Arbeitsverzeichnis, in dem ich bin cmd.

Vielen Dank für das Detail. Dies ist eine hervorragende Antwort. Als ich bash (http://chat.stackexchange.com/rooms/38465/discussion-between-dimpl-and-davidpostill) ausprobierte, fehlte mir die Option -c, also erhielt "keine solche Datei oder Verzeichnis" und `kann nicht Führen Sie binäre Datei-Fehler aus. Dimpl vor 8 Jahren 0