Shell-Workshop (4)

Status
Für weitere Antworten geschlossen.

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
In diesem Workshop geht es um die Redirektion von Datenströmen (streams).

In Unix/Linux sind die meisten Kommandos und Tools in C geschrieben und verwenden für ihre Dateioperationen eine C-Standard-Bibliothek. Wenn ein C-Programm dann ausgeführt wird, erhält es automatisch 3 geöffnete Dateiströme: stdin (lies Standard-Input), stdout (lies Standard-Output) und stderror (lies Standard Error/Fehlerausgabe). stdin ist geöffnet für Eingaben und wird bei einer Verwendung in einer Shell automatisch verbunden mit dem Tastaturtreiber. stdout und strerror werden automatisch mit dem Bildschirm (oder Psydoterminal beim Telnet bzw. SSH) verbunden. Diese Datenströme oder streams oder Ein-/Ausgabekanäle sind sequentieller Natur und - da ja eigentlich alles in Unix/Linux intern per Nummer geregelt wird - werden über interne durchnummerierte Dateideskriptoren (0, 1, 2 usw.) angesprochen. Wie gesagt, die ersten 3 werden immer automatisch angelegt.

Eine der komfortabelsten Eigenschaften einer Shell ist es nun, dass man zum Zeitpunkt des Programmaufrufs diese Datenströme neu definieren kann, also 'umlenken' (redirigieren) kann, meist in eine Datei. Je nachdem welchen Dateidesskriptor verwenden, kann man so aus einer Datei lesen oder eine Datei erstellen und beschreiben. Hierfür gibt folgende Symbole: '0<', '1>' und '2>' - '<' für Input und '>' für Output.

Machen wir ein Beispiel. Der Text 'Hallo Welt' soll in eine Datei namens 'text1' geschrieben werden:
Rich (BBCode):
Syno> echo 'Hallo Welt' 1>text1
Syno> ls
text1
Syno>

Das Tool 'more' kann den Inhalt einer Text-Datei (seitenweise) ausgeben:

Rich (BBCode):
Syno> more text1
Hallo Welt
Syno>

Auf diese Weise kann man alles was auf dem Bildschirm angezeigt wird auch in eine Datei schreiben:

Rich (BBCode):
Syno> date 1> text2
Syno> more text2
Tue Mar  8 10:35:03 CET 2011
Syno>

Mit '1>' wird eine Datei automatisch neu angelegt bzw. überschrieben, sofern sie vorhanden ist. Mit '1>>' kann man etwas an eine Datei anhängen:

Rich (BBCode):
Syno> date 1>> text1
Syno> more text1
Hallo Welt
Tue Mar  8 10:37:33 CET 2011
Syno>

Das Tool 'cat' (concatenate bzw. aneinander hängen) wird sehr häufig für Redirektionen verwendet.
Rich (BBCode):
Syno> cat text1 text2 1>> text3
Syno> cat 0< text3
Hallo Welt
Tue Mar  8 10:35:03 CET 2011
Tue Mar  8 10:35:03 CET 2011
Syno>

Man kann auch das Tool 'cat' für eine Eingabe per Tastatur Zweckentfremden; aber Achtung, es wird dadurch nicht zum Editor, weil man kann nur die Zeichen hintereinander eintippen:

Rich (BBCode):
Syno> cat 1> text4
Die Shell<RETURN>
ist ein tolles Teil<RETURN>
<Strg-D>
Syno>

Man sieht, dass wenn 'cat' keine Parameter mit Eingabe-Dateinamen enthält, dass automatisch stdin genommen wird; bei der Ausgabe wäre es stdout, wenn keine Umlenkung erfolgen würde. Mit <RETURN> und <Strg-D> ist das Drücken der entsprechenden Tasten gemeint.

Da Datenströme recht einfacher aber universeller Natur sind, kann die Shell mit ihnen noch weiter spielen: Man kann die Datenströme zweier Programme miteinander verknüpfen ... also den Standard-Ausgabedatenstrom mit dem Standard-Eingabedatenstrom. Dies wird der in der Shell mittel '|' (pipe) angefordert. Das Prorgamm 'wc' (word-count) soll das demonstrieren:

Rich (BBCode):
Syno> echo 'Hallo Welt' | wc
      1       2      11
Syno>

Der 'wc' zeigt an: 1 Zeile, 2 Worte, 11 Zeichen (Leerstelle und Zeilenvorschub mitzählen).

Anmerkung: Bei der Standardeingabe '0<' kann man die '0' auch weglassen. Bei der Standardausgabe '1>' kann man auch die '1' weglassen.

=======
Quizz-Frage: was passiert hier?
Rich (BBCode):
Syno> >text99
Viel Spaß beim Experimentieren.

Itari



=========================================
Sinnvollerweise sind die Shell-Workshops aufeinander aufgebaut.

Shell-Workshop (3)
Shell-Workshop (5)
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat