Die meisten Programme die du in der Shell startest, schreiben auf den standard output (das heisst, sie schreiben in die Shell). Viele Programme akzeptieren auch Input vom standard input (das heisst, sie lesen direkt was du mit der Tastatur eintippst). Zudem gibt es noch standard error, wo Programme ihre Fehlermeldungen ausgeben. Auch das wird normalerweise im dem Terminal angezeigt.
Du hast bereits gesehen, wie du mit cat den Inhalt einer Datei im Terminal ausgeben kannst.
Tippe jetzt cat ohne eine Datei anzugeben.
cat
Tippe dann ein paar Worte ein und drücke anschliessend [Enter]
.
Drücke schliesslich [Ctrl]+[d]
um die Eingabe zu beenden.
(Solche Ctrl-Kombinationen werden oft mit ^ abgekürzt. Für [Ctrl]+[d]
steht dann ^D.)
Was ist passiert?
Wenn du cat startest ohne eine Datei anzugeben, so liest cat vom standard input (der Tastatur) und schreibt auf den standard output (die Shell). Mit ^D sendest du das Signal für 'end of file' worauf cat beendet.
In Unix kannst du sowohl den input wie auch den output von Befehlen umleiten (redirect).
Mit dem > Zeichen kannst du den output eines Befehls umleiten. Um zum Beispiel eine Datei list1 zu erstellen, die eine Liste von Früchten enthält, tippe
cat > list1
Tippe dann die Namen einiger Früchte und drücke [Enter]
nach jeder Frucht.
Birne Banane Apfel ^D ([Ctrl]+[d] um zu beenden.)
Wie vorher hat cat vom standard input (der Tastatur) gelesen. Den Output hast du aber mit > umgeleitet. Statt in die Shell, wird der Output nun in die Datei list1 geschrieben.
Um zusehen wie deine neue Datei aussieht, tippe
cat list1
Erstelle, mit der Methode von oben, eine weitere Datei list2 mit den folgenden Früchten: Orange, Pflaume, Mango, Pfirsich. Kontrolliere anschliessend den Inhalt von list2.
Mit >> kannst du standard output am Ende einer bestehenden Datei hinzufügen. Um also noch weitere Früchte zu list1 hinzuzufügen, tippe
cat >> list1
und anschliessend die Namen weiterer Früchte
Mango Traube Orange ^D ([Ctrl]+[d])
kontrolliere wieder den Inhalt
cat list1
Du hast nun zwei Dateien. Die eine mit 6, die andere mit 4 Früchten Wir werden diese nun mit Hilfe von cat zu einer Datei biglist verbinden. Tippe
cat list1 list2 > biglist
Dieser Befehl liest hintereinander den Inhalt von list1 und list2, und schreibt dann den Text in die Datei biglist
Um den Inhalt der neuen Datei anzuzeigen, tippe
cat biglist
Um den Input eines Befehls umzuleiten, verwendest du das < Zeichen.
Als Beispiel verwenden wir sort. Mit sort kannst du eine Liste alphabetisch oder numerisch sortieren. Tippe
sort
und gib dann die Namen einiger Gemüsesorten ein. Drücke [Enter]
nach jeder.
Gurke Zucchetti Aubergine ^D ([Ctrl]+[d])
Der Output ist dann
Aubergine Gurke Zucchetti
Mit < kannst du nun den Input so umleiten, dass dieser aus einer Datei gelesen wird. Um also deine Liste mit Früchten zu sortieren, tippe
sort < biglist
Wie du siehst, erhältst du die Namen sortiert zurück.
Natürlich kannst du nun den Output auch gleich in eine Datei schreiben lassen, tippe
sort < biglist > slist
Verwende cat um den Inhalt von slist zu kontrollieren.
Hinweis: Wie die meisten Programme kannst du sort auch eine Datei als Argument
übergeben. Der letzte Befehl macht das gleiche wie sort biglist > slist
.
Ausserdem könntest du auch cat
und eine Pipe verwenden. Das gibt meist besser lesbare Befehlszeilen.
Eine sehr nützliche Art um den Output eines Programms umzuleiten, ist eine Pipe.
Mit dem letzten Befehl haben wir eine alphabetische Liste von allen Früchten in unseren beiden Dateien list1 und list2 erstellt. Dafür hatten wir die beiden Listen zuerst in eine Datei kombiniert und diese Datei dann sortiert.
Das gleiche können wir auch direkt machen, indem wir den Output von cat direkt als Input an sort weiterleiten. Genau dafür sind Pipes. Das Zeichen für eine Pipe ist ein senkrechter Strich |. Der Befehl zu unserem Beispiel würde also so aussehen:
cat list1 list2 | sort
diese Art den Output eines Programms durch ein weiteres zu pipen ist sehr einfach und sehr mächtig. Du könntest nun auch den Output von sort wieder weiterleiten. Zum Beispiel um nur noch Früchte anzuzeigen, die den Buchstaben P enthalten:
cat list1 list2 | sort | grep -i 'p'
Wie viele Dateien oder Ordner in deinem home-Verzeichnis enthalten den Buchstaben 'd' im Dateinamen? Beantworte die Frage mit den bisher bekannten Befehlen und sinnvollem Einsatz von Pipes.
ls ~ | grep -i 'd' | wc -l
cat file |
Datei auf dem Standard Output ausgeben |
cat > file |
Eingabe in Datei schreiben |
cat file1 file2 > file0 |
file1 und file2 zu file0 kombinieren |
command > file |
Standard Output in eine Datei umleiten |
command >> file |
Standard Output am Ende einer Datei hinzufügen |
command < file |
Standard Input aus einer Datei lesen |
command1 | command2 |
Den Output von command1 in den Input von command2 umleiten (Pipe) |
sort |
Daten sortieren |