Standard Ein- und Ausgabekanäle

Bei der Ausführung von Kommandos unter Bash existieren drei verschiedene „Kanäle“ (Dateideskriptoren, die auf Betriebssystemebene wie Dateien behandelt werden).


Standardeingabe (1 – stdin)
Wenn du ein Script oder einen Befehl absetzt, so werden diese über die Standardeingabe gelesen. Als übliche Standardeingabequelle gilt die Tastatur.


Standardausgabe (2 – stdout)
Dorthin werden alle Ausgaben des Scripts geleitet. Als übliche Standardausgabequelle gilt das Terminal.


Standarderror (3 – stderr)
Über diesen Kanal werden alle Fehler ausgegeben. Als Standarderrorausgabequelle dient dabei ebenfalls das Terminal.


Wozu werden diese Kanäle verwendet?

Ein Beispiel wäre, wenn du den gesamten Inhalt aus einem Verzeichnis in separate Datei schreiben möchtest:

ls *.txt > verzeichnis.txt

Durch diesen Befehle wird die Auflistung des Verzeichnisses direkt in die neu angelegte Datei verzeichnis.txt gespeichert ohne eine Ausgabe auf dem Terminal zu erzeugen.


Wozu ist kann man die Kanäle noch verwenden?

z.B. um die eine Logdatei mit den Fehlern zu befüllen, aber eine korrekte Ausgabe weiterhin auf dem Bildschirm auszugeben.

ls /keinverzeichnis /home/${USER} 2>/tmp/${$}.log

# ls - listet Inhalte eines Verzeichnisses auf
# /keinverzeichnis - ein nicht vorhandenes Verzeichnis auf dem System
# /home/${USER} - euer benutzerspezifisches Homeverzeichnis (außer root)
# 2>/tmp/${$}.log - leitet sdtout in die Logdatei mit dem Namen [Prozess-ID].log um



Weiterhin kannst du auch mit Hilfe der Kanäle eine Datei anlegen und befüllen:

$ echo "Das ist der Inhalt" > neueDatei
# leitet die Ausgabe in die "neueDatei"

$ echo neueDatei
$ Das ist der Inhalt



Auf diesem Weg kannst du auch eine Datei z.B. sortieren:

sort < eingabe > ausgabe
# für den Sort wird "eingabe" verwendet und die Ausgabe in die der Datei "ausgabe" gespeichert



Es ist nicht möglich, eine Datei zu bearbeiten und gleichzeitig das Ergebnis wieder in diese Datei zu schreiben!


KOMMANDOFUNKTION
kommando > dateileitet Standardausgabe zur angegeben Datei
kommando < dateiliest Eingaben aus der angegeben Datei
kommando 2> dateileitet Fehlermeldungen in die angegebene Datei
kommando >& dateileitet Ausgaben und Fehler um
kommando &> dateileitet ebenfalls Ausgaben und Fehler um
kommando >> dateihängt Standardausgaben an die vorhandenen
kommando &>> dateihängt Ausgaben und Fehler an die Datei an


Man kann auch z.B. eine Liste mit Zahlen erstellen:
erstelle_zahlenliste.sh

#!/bin/bash
set -x

for((i=1;i<=100;i=i+1)) ;do
  echo ${i} >> ausgabe.dat
done



Das Script gibt es hier zum DOWNLOAD

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.