|
Einführung in die Bash - Teil 2: Standard Kanäle und Pipes
|
|
24-01-2012, 11:58 AM
(Dieser Beitrag wurde zuletzt bearbeitet: 25-01-2012 10:12 AM von Florian Reith.)
Beitrag #1
|
|||
|
|||
|
Einführung in die Bash - Teil 2: Standard Kanäle und Pipes
Standard Kanäle Wie jede andere Shell auch, bringt die Bash drei Standard Kanäle zur Regulierung von Streams (Datenströmen) mit sich. Man spricht hier von I/O bzw. Input/Output (Eingabe/Ausgabe). ![]() stdin (Kanal 0) - der Eingabekanal (Standard-Input) Dieser Kanal empfängt Daten oder Eingaben und reicht sie an das Programm weiter. stdout (Kanal 1) der Ausgabekanal (Standard-Output) Dieser Kanal gibt die Daten aus, die ein Prozess zurückgibt. stderr (Kanal 2) der Fehlerausgabekanal (Standard-Error) Produziert ein Prozess einen Fehler, so wird dieser auf diesem Kanal ausgegeben. Umleitung der Standard Kanäle (I/O Redirect) ![]() Die eben beschriebenen Standard Kanäle lassen sich nicht nur ausgeben sondern alternativ auch aus Dateien heraus bzw. in Dateien hinein umleiten (lesen/schreiben). Beispiel 1 - Umleiten von stdout in eine Datei (überschreiben) Die Dateien und Ordner in einem Verzeichnis sollen aufgelistet und das Ergebnis in die Datei "liste.txt" gespeichert werden. Kommando: Code: ls 1> liste.txtDer Kanal 1 (Standard Output bzw stdout) des Programms ls wird in die Datei liste.txt umgeleitet, welche vor dem eigentlichen Umleiten erstellt wird. Hinweis: Existiert diese Datei, wird sie überschrieben!Beispiel 2 - Umleiten von stdout in eine Datei (anhängen) Die Dateien und Ordner in einem Verzeichnis sollen aufgelistet und das Ergebnis an die Datei "liste.txt" angehängt werden. Kommando: Code: ls 1>> liste.txtDer Kanal 1 (Standard Output bzw. stdout) des Programms ls wird an die Datei liste.txt angehängt. Die Datei wird dementsprechend nicht überschrieben. Beispiel 3 - Umleiten von stderr in eine Datei (anhängen) Die Dateien und Ordner in einem nicht existierenden Verzeichnis sollen aufgelistet und die Fehlermeldung an den Error-Log "error.log" angehängt werden. Kommando: Code: ls abcd 2>> error.logDas Verzeichnis "abcd" existiert nicht und der Fehler wird über Fehlerkanal 2 (Standard Error bzw. stderr) des Programms ls an die Datei error.log angehängt. Die Datei wird wie auch in den vorherigen Beispielen nicht überschrieben. Tipp: Lässt man die 1 bei der Ausgabeumlenkung (>) weg, so benutzt die Bash automatisch Kanal 1 (Output).Beispiel 4 - Umleiten von mehreren Kanälen Die Dateien und Ordner in einem dem Verzeichnis abcd werden aufgelistet und in die Datei liste.txt gespeichert. Existiert die der Ordner abcd nicht, wird der Fehler in der Datei error.log vermerkt. Kommando: Code: ls abcd > liste.txt 2> error.logFall 1: Das Verzeichnis "abcd" existiert und die Dateiliste wird in die Datei liste.txt geleitet. Fall 2: Das Verzeichnis "abcd" existiert nicht und der Fehler wird in die Datei error.log geleitet. Tipp: Die Reihenfolge des Befehls ist von Bedeutung, existierende Dateien werden überschrieben.Beispiel 5 - Kanäle ineinander leiten Die Dateien und Ordner in einem dem Verzeichnis abcd werden aufgelistet und in die Datei full.log gespeichert. Fehler landen ebenfalls in der full.log Kommando: Code: ls abcd >full.log 2>&1Alles Ausgaben aus Kanal 1 und 2 werden in die gleiche Datei geleitet (full.log) Tipp: Die Reihenfolge des Befehls ist von Bedeutung, existierende Dateien werden überschrieben.Beispiel 6 - eine einfache Eingabe-Umleitung: Kommando: Code: mail -s "Anti-Hack ist toll" [email protected] < nachricht.txtAn [email protected] wird eine E-Mail mit dem Betreff "Anti-Hack ist toll" und dem Text aus der Datei nachricht.txt versandt. ![]()  Tipp: Lässt man die 0 vor der Eingabeumlenkung (<) weg, so benutzt die Shell den Kanal 0 (stdin)!Pipes Bei der Verwendung von Pipes wird die Ausgabe eines Prozesses zur Eingabe eines anderen Prozesses: Beispiel: Kommando: Code: cat namen.txt | grep FlorianBeschreibung: Gibt nur die Zeilen der Datei namen.txt aus, welche das Wort bzw. den Namen "Florian" enthalten. Weiterlesen: Einführung in die Bash - Teil 3: Globbing 10.10.10 Le roi est mort! Vive le roi! |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste



![[Bild: 4020820a81-STDStreamsbzw.Kanaele.png]](http://picbox.im/image/4020820a81-STDStreamsbzw.Kanaele.png)
![[Bild: e321963b85-umleitung.png]](http://picbox.im/image/e321963b85-umleitung.png)
![[Bild: 7b6c9f3931-Bildschirmfoto_20120124_um_11.43.12.png]](http://picbox.im/image/7b6c9f3931-Bildschirmfoto_20120124_um_11.43.12.png)





