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

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

Ich möchte ein C-Programm in Mintty ausführen und den stderrAusgabestrom 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.txtBefehl 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 directoryund erstellt eine Datei mit dem Namen debug.txt'.

Antwort1

Der Fehler hier ist recht einfach zu verstehen: minttyleitet 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 minttywird direkt gestartet my_command.

Wenn Sie Anführungszeichen setzen "my_command 2>out.err", geben Sie an, minttydass 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.

verwandte Informationen