Springe zum Hauptinhalt

Archiv
next up previous contents
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() $\Rightarrow$ Lesen von stdin
    putchar(), printf() $\Rightarrow$ Schreiben nach stdout
    fprintf() $\Rightarrow$ Schreiben nach stderr
    Beispiele für Programme, die ihre Informationen auf stdout ausgeben:

    $ 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 <${\it shellproc}$

        ...

  • 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.
        $\Rightarrow$ stdin
      1 $\Rightarrow$ stdout
      2 $\Rightarrow$ stderr
      1.
      Umlenken Ausgabekanal fd_nr nach ofile:

      fd_nr >ofile


      z.B. 2>diagnose $\Rightarrow$ 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:


      ${\it fd\_nr_{1} \gt\&fd\_nr_{2} }$


      ${\it fd\_nr_{1} <\&fd\_nr_{2} }$


      z.B. 2>&1 $\Rightarrow$ 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.


next up previous contents
Next: Pipelineverarbeitung Up: Bourne-Shell als Kommando- und Previous: Kommandos