Internal reference: topics/04-1.md
Wenn sie mit der Shell arbeiten, gibt es unterschiedliche Informationskanäle, welche sie verwenden können.
stdin - Standardeingabekanal (0): z.B. sie geben Zeichen über die Tastatur einstdout - Standardausgabekanal (1): z.B. ein Programm zeigt den Inhalt eines Verzeichnisses am Bildschirm ansterr - Standardfehlerausgabekanal (2): z.B. ein Programm erzeugt einen Fehler und zeigt diesen am Bildschirm anJeder der Kanäle kann über die jeweilige Nummer angesprochen werden (0,1,2)
Die Ausgabe (stdout) eines Befehls kann umgeleitet werden mit > oder »
Beispiele:
ls -la > liste.txt ./meinskript > outputofscript.txt cat outputofscript.txt >> list.txt
» hängt Inhalt an bestehende Datei an, > überschreibt den Inhalt
komplett mit Neuem
Die unterschiedlichen Kanäle können mit der Nummer spezifiziert werden:
# Leitet nur Fehlermeldungen in die Datei errorsofscript.txt ./meinskript 2> errorsofscript.txt'' # Leitet den üblichen Output in die Datei ''outputofscript.txt'' ./meinskript 1> outputofscript.txt # Dasselbe geht auch im Anhänge-Modus ./meinzweitesskript 2>> errorsofscript.txt # Unterschiedliche Umleitungen der Kanäle in einem Befehl ./skript 1> output.txt 2> error.txt''
Es gibt einen Abfall Eimer: > /dev/null. Darin verschwinden alle Ausgaben.
Will man Standardausgabe und Standardfehlerausgabe über denselben Kanal ausgeben, kann man diese mit 2>&1 (Leitet stderr in stdout) koppeln:
./skript > output.txt 2>&1
Hier ist die Reihenfolge von > output.txt und 2>&1 wichtig. Umgekehrt funktioniert es nicht wie erwünscht.
Will man einen Ausgabekanal *ausschalten*, kann dieser nach /dev/null (der Linux-Daten-Schredder) umgeleitet werden:
# Unterdrückt die Ausgabe von Fehlern ./skript > output.txt 2>/dev/null
Gleichwohl kann die Standardeingabe (oder Ein - und Ausgabe gleichzeitig) umgeleitet werden
cat < meinFile.txt cat < meinFile.txt > meinKopiertesFile.txt
Manuelle Eingabe: « fängt eine interaktive Eingabe ab, bis ein Schlüsselwort zu Terminierung eingegeben wird (z.B. fertig).
sort << fertig Z B A fertig A B Z
Praktischer Anwendungsfall: Um interaktive Tools (wie ftp oder ssh) mit programmierten Eingaben zu füttern!
Das Konzept der Pipeline ist sehr effektiv beim Shell-Scripting! (Hint: Im Gegensatz zu Nordstream sollte es oft eingesetzt werden!)
In einer Pipeline wird die Ausgabe (stdout) des vorhergehenden Befehls als textueller Output an den nächsten weitergereicht:
(1) Filtert alle Zeilen mit dem Begriff hallo aus der Datei meinFile.txt:
cat meinFile.txt | grep hallo
(2) Filtert und sortiert alle Zeilen mit dem Begriff hallo aus der
Datei meinFile.txt (ohne Duplikate):
cat meinFile.txt | grep hallo | uniq | sort
(3) liefert eine Liste aller Benutzernamen (Alles vor dem ersten Doppelpunkt in jeder Zeile in /etc/passwd), ausser dem Benutzer irc.
cat /etc/passwd | grep -v irc | cut -d ’:’ -f 1