Next: Pipelineverarbeitung Up: Bourne-Shell als Kommando- und Previous: Kommandos
Standard- E/A und Fileumlenkung
-
Shell stellt jedem Programm, das sie aufruft, drei E/A- Verbindungen (Kanäle) bereit:
- Standardeingabefile (standard input -- stdin)
- Standardausgabefile (standard output -- stdout)
- Diagnoseausgabefile (standard error -- stderr)
-
Programme, die ihre E/A über diese logischen Verbindungen erledigen, brauchen sich um
das Öffnen bzw. Schließen nicht kümmern
Beispiel: Funktionen der C-Standardbibliothek:
getchar(), scanf() Lesen von stdin putchar(), printf() Schreiben nach stdout fprintf() Schreiben nach stderr $ ls, ps, who, date, echo, cat
Beispiele für Programme, die von stdin lesen und nach stdout ausgeben:
$ sh, sort, cat, wc, tr
-
Normalerweise sind diese 3 Standardfiles dem Terminal des betreffenden Nutzers zugeordnet,
sie können jedoch auf einfache Weise auf beliebige Files ,,umgelenkt`` werden (i/o
redirection):
Beispiel: für Fileumlenkung
$ ls >tmpfile $ wc -l <tmpfile 11 $ cat tmpfile kap01.tex kap02.tex kap03.tex kap04.tex kap05.tex kap06.tex kap07.tex kap08.tex kap09.tex rahmen.tex tmpfile $
allgemeine Notation:<ifile Lesen ifile >ofile Schreiben ofile, falls ofile bereits existierte, so wird es überschrieben >>ofile Fortschreiben von ofile
Problem: cmd <file >file ?! -
Shell als Kommando:
File shellproc enthalte Folge von Kommandos
$ sh <...
-
Bemerkungen:
-
Ausnutzung von zwei Tatsachen
- 1.
- Shell ist ,,gewöhnliches`` Programm
- 2.
- Shell liest von der Standardeingabe
- Ablauf: ,,aktuelle`` Shell ruft sich quasi selbst auf (Kopie) und wartet, bis diese neue Shell-Instanz das File shellproc gelesen hat (EOF) und die darin enthaltenen Kommandos ausgeführt worden sind
- es existieren noch weitere Möglichkeiten zur Ausführung von Shell-Scripts (s. Abschnitt Shell-Scripts)
-
shellproc kann mit dem Editor vi erzeugt werden, hier jedoch Nutzung von cat plus
Fileumlenkung (,,primitive Texterfassung``):
$ cat >shellproc ls >tmpfile wc -l <tmpfile rm tmpfile <CRTL-D> $
-
Es existieren weitere (selten benutzte) Möglichkeiten der Fileumlenkung; den
logischen E/A-Kanälen sind sogenannte Filedeskriptoren (fd_nr) zugeordnet,
z.B.
stdin 1 stdout 2 stderr - 1.
-
Umlenken Ausgabekanal fd_nr nach ofile:
fd_nr >ofile
z.B. 2>diagnose stderr in diagnose umgelenkt - 2.
-
Umlenken Eingabekanal fd_nr auf ifile:
fd_nr <ifile - 3.
-
Umlenken Standardausgabe in Ausgabekanal:
fd_nr >&fd_nr - 4.
-
Umlenken Standardeingabe auf Eingabekanal
fd_nr <&fd_nr - 5.
-
Verallgemeinerung:
z.B. 2>&1 Standardfehlerausgabe auf Standardausgabe gemischte Ausgaben - 6.
-
stdin, stdout schließen
>&- bzw. <&- - 7.
-
,,here``-Dokumente
<<wort darauf wird später im Zusammenhang mit Shell-Scripts eingegangen.
-
Ausnutzung von zwei Tatsachen
Next: Pipelineverarbeitung Up: Bourne-Shell als Kommando- und Previous: Kommandos