Wie kann ich Windows-Programme aus Cygwin heraus starten und deren Ausgabe lesen?
- Ausführung von Windows-Programmen aus Cygwin
- Problematik der Ausgabe von Windows-Programmen
- Probleme bei der Pfadangabe und Pfadkonvertierung
- Einlesen der Ausgabe in Skripten
- Aufruf von Windows-Programmen mit cmd.exe
- Zusammenfassung
Die Cygwin-Umgebung ermöglicht es, Unix-ähnliche Werkzeuge unter Windows zu nutzen, bietet aber zugleich die Möglichkeit, native Windows-Programme aufzurufen. Dabei kann es nützlich sein, Windows-Programme direkt aus Cygwin heraus zu starten und deren Ausgabe im Terminal zu erfassen und weiterzuverarbeiten.
Ausführung von Windows-Programmen aus Cygwin
Unter Cygwin können Windows-Programme meist direkt mit ihrem ausführbaren Dateinamen oder Pfad gestartet werden. Das liegt daran, dass Cygwin auf der Windows-API aufsetzt und Windows-Executables (.exe) normalerweise kompatibel sind. Beispielsweise kann man einfach folgenden Befehl im Cygwin-Terminal ausführen:
/cygdrive/c/Windows/System32/notepad.exeoder, wenn das Programm in einem Verzeichnis liegt, das im PATH enthalten ist, einfach:
notepad.exeEinfach das Programm als Befehl im Terminal einzugeben funktioniert in den meisten Fällen problemlos.
Problematik der Ausgabe von Windows-Programmen
Viele native Windows-Programme besitzen keine Konsolenausgabe, da sie als GUI-Anwendungen entwickelt wurden. Deshalb zeigen Programme wie "notepad.exe" keine Textausgabe im Terminal an. Konsolenanwendungen wie "ipconfig.exe" oder "ping.exe" erzeugen dagegen eine Standardausgabe, die unter Cygwin lesbar sein sollte.
Wenn die Ausgabe eines Windows-Programms erfasst werden soll, funktionieren Konsolenanwendungen in der Regel direkt, d.h. man kann:
ipconfig.exestarten und die Ausgabe wird direkt im Terminal angezeigt. Ebenso kann man die Ausgabe in eine Datei umleiten:
ipconfig.exe > output.txtund anschließend mit Cygwin-Kommandos weiterverarbeiten.
Probleme bei der Pfadangabe und Pfadkonvertierung
Oft entsteht Verwirrung durch die unterschiedlichen Pfadformate von Windows und Cygwin. Windows nutzt Pfade wie C:\Programme\MeinProgramm\programm.exe, während Cygwin Pfade im Unix-Format verwendet, beispielsweise /cygdrive/c/Programme/MeinProgramm/programm.exe. Beim Aufruf von Windows-Programmen muss man daher meist den Pfad ins Cygwin-Format umwandeln.
Es ist allerdings auch möglich, direkt Windows-Pfade in Anführungszeichen zu verwenden, wie etwa:
"/cygdrive/c/Programme/MeinProgramm/programm.exe"oder man nutzt das Cygwin-Werkzeug cygpath, um Windows-Pfade in Cygwin-Pfade und umgekehrt zu konvertieren:
programmpfad=$(cygpath -u "C:\\Programme\\MeinProgramm\\programm.exe")"$programmpfad"Einlesen der Ausgabe in Skripten
Wenn man in einem Shell-Skript die Ausgabe eines Windows-Programms einlesen will, kann man die typische Bash-Syntax verwenden, z.B.:
ausgabe=$(ipconfig.exe)Diese Variable ausgabe enthält dann die komplette Standardausgabe des Programms. Man kann die Ausgabe auch zeilenweise lesen:
ipconfig.exe | while read zeile; do echo "Zeile: $zeile"doneDas funktioniert problemlos mit Programmen, die ihre Ausgabe auf der Standardausgabe bzw. Standardfehler ausgeben.
Aufruf von Windows-Programmen mit cmd.exe
Eine alternative Möglichkeit ist, Windows-Programme über die Eingabeaufforderung cmd.exe zu starten. Dies kann helfen, wenn man spezielle Optionen verwenden will oder die Programmstartumgebung von Windows benötigt. Ein Beispiel:
cmd.exe /c ipconfigDie Option /c sorgt dafür, dass cmd.exe den übergebenen Befehl startet und danach beendet wird. Die Ausgabe wird direkt im Cygwin-Terminal angezeigt, sodass man sie wie oben beschrieben erfassen kann.
Zusammenfassung
Windows-Programme lassen sich direkt aus Cygwin heraus starten, indem man den Pfad zum Programm entweder im Cygwin-Format angibt oder einfach den Programmnamen benutzt, falls es im PATH ist. Für die Ausgabe gilt, dass Konsolenprogramme deren Textausgabe direkt im Terminal erscheinen lassen und so auch gut in Skripte eingelesen werden können. GUI-Programme liefern meist keine Konsolenausgabe und eignen sich daher nicht für dieses Vorgehen.
Falls Probleme bei der Pfadangabe entstehen, hilft das Werkzeug cygpath zur Konvertierung zwischen Windows- und Cygwin-Pfaden. Für besondere Fälle kann man auch cmd.exe /c verwenden, um Windows-Befehle in der Windows-Shell ausführen zu lassen.
