Orgapage.Net





t3n Magazin - Jetzt im Abo bestellen


Datenströme | Pipes

Eine der genialsten Erfindungen der Shell, ist die Möglichkeit die Ausgabe eines Befehls an einen nächsten zur weiterverarbeitung weiterreichen zu können.
Dazu dient das Pipe-Symbol (|).

Hier ein Beispiel:
cat datei.txt | grep "suche"
Der Befehl cat Listet den kompletten Inhalt der angegebenen Datei auf. Ist man nun nur an bestimmten Zeilen der Datei interesiert, so leitet man die Ausgabe einfach an den Befehl grep weiter. Dieser filtert die Zeilen herraus, in denen "suche" vorkommt. Das Ergebnis sind alle Zeilen aus datei.txt, die "suche" enthalten. 

Es wird bei Linux zwischen 3 Datenströmkanälen unterschieden: 

StdIn (0): < 
StdOut (1) > 
StdErr (2) 2> 

Die oben beschriebene Pipe macht dabei nichts anderes, als den Ausgabekanal des ersten Befehls mit den Eingabekanal des zweiten zu verknüpfen 

Das heißt, dass evtl. Fehlermeldungen des ersten Befehls, die ja auf StdErr ausgegeben werden durch einfaches Verketten nicht weitergeleitet werden. 

Das Ergebnis auf der Komandozeile des Beispiels oben ist also nicht nur die Zeilen die "suche" enthalten, sondern auch Fehlermeldungen, die der Befehl cat ausgibt. 

Um den grep-Filter auch auf die Fehlermeldungen anzuwenden, muss zuerst der Fehlerkanal in den Ausgabekanal umgeleitet werden: 

cat datei.txt 2>&1 | grep "suche" 


Schreiben in Dateien 

Man kann die Ausgabe auch in eien Datei umleiten lassen. Dazu hängt man an den Befehl einfach ein > datei.txt an. Das ist z.b. dann sehr praktisch, wenn ein Befehl eine sehr lange Ausgabe erzeugt und man diese später näher analysieren möchte. 

Der vorherige Inhalt der Ausgabedatei geht dabei verloren. Möchte man die Ausgabe lieber der Datei anhängen, anstatt sie zu löschen, kann man doppelte größer-Zeichen verwenden: >> datei.txt 


Lesen aus einer Datei 

Nach dem gleichen Prinzip lassen sich Daten aus einer Datei auslesen und an einen Befehl übergeben passwd < passwort.txt


Fehlerkanal Umleiten 

Manchmal möchte man keine Fehlermeldungen sehen, die ein Befehl verursacht. Dazu kann man den Fehlerkanal nach /dev/null umleiten 2> /dev/null


Weitere Seiten zu diesem Thema:
URL: Von:
Titel:  
Captcha:
Text bewerten:
Aktuelle Wertung: 0 (0x)
Seit der letzten Änderung: 0 (0x)

Kommentare     Seite:

Die Kommentar-Funktion ist derzeit leider deaktiviert.
Bitte nutze das Forum statt dessen.