Ausgabe von gewissen Unix-Befehlen erfassen

Donnerstag, 01 Mai 2008
0.0/5 Bewertung (0 Stimmen)
Beschreibung

Ich versuchte kürzlich einen kleinen Shell-Skript mit dem Befehl httpd -t, der eine Syntax-Prüfung für die Apache-Konfigurationsdateien laufen lässt, zu programmieren. Wenn alles OK ist, gibt er Syntax OK zurück, sonst versucht er Ihnen zu sagen, was an den Dateien falsch ist.
Ich wollte nun die Ausgabe von httpd -t erfassen und sie in meinem Skript anzeigen. Leider hatte ich kein Glück, denn alle Versuche irgendwie an die Ausgabe zu kommen, schlugen fehl (leere Variable, leere Datei, etc.). Wenn Sie ein Unix-Kenner sind, können Sie hier aufhören zu lesen, denn Sie wissen bestimmt, wo das Problem liegt...
Nach langem Googlen fand ich heraus, dass einige Unix-Befehle ihre Rückmeldungen nicht in der Standardausgabe (normalerweise das Terminal-Fenster), sondern in der Standardfehlerausgabe (STDERR) ausgeben. Natürlich funktionieren die Befehle welche die Standardausgabe erfassen so nicht wie gewünscht, auch wenn die Rückmeldung aus der STDERR im Terminalfenster angezeigt wird. Die Lösung fand ich [URL=http://de.wikipedia.org/wiki/Stderr#Standard_error_.28stderr.29]im Wikipediaartikel über stderr:[/URL] Fügen Sie 2>&1 ans Ende des Befehls (gilt für alle sh-shells, also auch der Standartshell von MacOS X: bash). Diese Zeichen leiten die Standardfehlerausgabe ans selbe Ziel wie die Standardausgabe um. So können die Daten ganz normal erfasst werden. Wenn Sie beispielsweise die Ausgabe von httpd -t in die Zwischenablage kopieren möchten, können Sie folgende Befehle verwenden:

$ httpd -t 2>&1 | pbcopy
$ pbpaste
Syntax OK

Wenn Sie die Ausgabe als Variable im Skript verwenden möchten, benutzen Sie folgendes:

CONFIGTEST=`httpd -t 2>&1`

Es gibt noch viele andere Befehle, die ebenfalls die Standardfehlerausgabe benutzen. Beispielsweise ssh -V , der die Versionsinformationen für ssh ausgibt.

Spezifikationen

Hits

2292

© by macjaner.ch | Powered by GoeGG-ArT.ch