Ich möchte ein C-Programm in Mintty ausführen und den stderr
Ausgabestrom in eine Datei namens debug.txt umleiten. Dies kann folgendermaßen erreicht werden:
./zombie_jump 2>debug.txt
Ich habe jedoch Probleme, dies über die Windows-Befehlszeile zu starten.
mintty -s 70,55 ./zombie_jump 2>debug.txt
verhält sich, als ob der 2>debug.txt
Befehl weggelassen worden wäre (das Programm wird ausgeführt, der Fehlerstrom wird jedoch nicht umgeleitet) und
mintty -s 70,55 "./zombie_jump 2>debug.txt"
verhält sich, als hätte ich "./zombie_jump 2>debug.txt" gesendet, was den Fehler verursacht 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 directory
und erstellt eine Datei mit dem Namen debug.txt'
.
Antwort1
Der Fehler hier ist recht einfach zu verstehen: mintty
leitet die Ausgabe Ihres Programms nicht an (vermutlich) weiter cmd
, wo die Ausgabeumleitung eingerichtet ist. Stattdessen zeigt es die Ausgabe in einem eigenen GUI-Fenster an. Dafür ist ein Terminalemulator schließlich gedacht. :)
Die Ausgabeumleitung ist eine Shell-Funktion. Wenn Sie einfach ausführen mintty my_command
, verwenden Sie überhaupt keine Shell. Stattdessen mintty
wird direkt gestartet my_command
.
Wenn Sie Anführungszeichen setzen "my_command 2>out.err"
, geben Sie an, mintty
dass nach einem Befehl mit diesem (vollständigen) Namen gesucht werden soll. Dies entspricht der Eingabe "my_command 2>out.err"
in eine normale Linux-Shell. Funktioniert so oder so nicht.
Nachdem wir nun festgestellt haben, dass es sich um eine Shell-Funktion handelt, ist klar, dass wir eine Shell benötigen. Eine häufige Wahl wäre Bash. Bash kann eine Befehlszeichenfolge übergeben werden, die beim Start ausgeführt wird, wie folgt:
bash -c "my_command 2>out.err"
Das bedeutet, dass wir es wie folgt verwenden können mintty
:
mintty /bin/bash -c "my_command 2>out.err"
Auf meinem Computer erbt die auf diese Weise gestartete Cygwin-Bash-Shell das Arbeitsverzeichnis, in dem ich mich befinde cmd
.