Springe zum Hauptinhalt

Bourne
next up previous contents
Next: read-Kommando Up: Spezielle Probleme und Kommandos Previous: Abfangen von Signalen

eval-Kommando


Die Argumente des eval-Kommandos werden als Kommando betrachtet und ausgeführt.

  • Notation:


    eval arg1 ... argn

  • Beispiel:
    #!/bin/sh
    #
    # Kopieren von Filebaeumen in ein Zielverzeichnis
    # Aufruf: copytree verzeichnis1 [verzeichnis2 ... ] ziel_verzeichnis
    #
    eval 'last=$'$#
    while [ $# -gt 1 ]
    do
         echo "copy from $1 to $last"
         (cd $1; tar cf - .) | (cd $last; tar xf -)
         shift
    done
    
  • Bemerkung:
    • eval notwendig, um zweistufige Auswertung zu erzwingen:

      1. $# wird ersetzt durch Argumentzahl

      2. Zuweisung des Zeichenkettenwertes des letzten Argumentes an die Variable last!!

    • Das Kommando tar -xf - . bewirkt, daß von der Standardeingabe (-), d.h. der Pipe gelesen und auf das aktuelle Verzeichnis geschrieben wird.
    • Die Konsequenz dieser Pipeline besteht darin, daß alle Files des Ausgangsverzeichnisses kopiert werden. Das Starten zweier Sub-Shells ist notwendig, um mit ,,zwei`` aktuellen Verzeichnissen arbeiten zu können.