Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ set(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

env(1)

getopts(1)

ksh(1)

sh(1)

set(1)                                                               set(1)

NAME
     set - Shell-Optionen oder Stellungsparameter setzen

SYNTAX
     set [option ...] [argument ...]

BESCHREIBUNG
     Das in die Shell sh bzw. ksh eingebaute Kommando set hat drei Funktio-
     nen:

     ⊕  Ist kein Operand angegeben, gibt set die Namen und Werte aller
        Shell-Variablen, die für die aktuelle Shell definiert sind, auf die
        Standardausgabe aus.

        Das Kommando env dagegen gibt die Namen und Werte aller Shell-
        Variablen auf die Standardausgabe aus, die an jedes aufgerufene
        Kommando und jede Subshell weitergereicht werden. Variablen wie
        IFS, MAILCHECK, PATH, PS1 und PS2 sind in dieser Ausgabe nur ent-
        halten, wenn sie mit export exportiert wurden.

     ⊕  Entsprechend den angegebenen Optionen steuert set den Ablauf der
        aktuellen Shell.

        Die gleichen Optionen können Sie auch bei sh bzw. ksh angeben,
        allerdings steuert sh bzw. ksh den Ablauf der aufgerufenen Sub-
        shell.

     ⊕  Mit Argumenten, die statt einer Option oder nach den Optionen ange-
        geben sind, führt set folgendes aus:

        -  die Stellungsparameter $1, $2, ... und $9 versorgt set mit den
           ersten neun angegebenen Argumenten,

        -  die Shell-Parameter $* und $@ versorgt set mit allen angegebenen
           Argumenten,

        -  den Shell-Parameter $# versorgt set mit der Anzahl der angegebe-
           nen Argumente.

        Sind weniger als neun Argumente angegeben, werden die restlichen
        Stellungsparameter mit der leeren Zeichenkette versorgt.

        Mit shift können Sie das zehnte und weitere Aufrufargumente direkt
        ansprechen.

     Wenn Sie mit set den Ablauf einer Shell-Prozedur beeinflussen wollen,
     müssen Sie dieses Kommando in die Prozedur schreiben, da Shell-Proze-
     duren immer von einer Subshell ausgeführt werden.







Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

set(1)                                                               set(1)

OPTIONEN
     Keine Option angegeben:
          set versorgt die Stellungsparameter $1, $2, ... und $9 mit den
          ersten neun angegebenen Argumenten. Die Shell-Parameter $* und $@
          versorgt set mit allen angegebenen Argumenten und den Shell-
          Parameter $# mit der Anzahl der angegebenen Argumente. Sind weni-
          ger als neun Argumente angegeben, werden die restlichen Stel-
          lungsparameter mit der leeren Zeichenkette versorgt.

          Mit shift können Sie das zehnte und weitere Aufrufargumente
          direkt ansprechen.

     Kein Operand angegeben:
          set gibt die Namen und Werte aller Shell-Variablen, die für die
          aktuelle Shell definiert sind, auf die Standardausgabe aus.

     option
          steuert den Ablauf der aktuellen Shell.

          Wenn Sie mehrere Optionen angeben wollen, müssen Sie die entspre-
          chenden Buchstaben ohne Leerzeichen aneinanderhängen. Der Binde-
          strich - darf nur vor dem ersten Buchstaben stehen

          Die Option -- können Sie nicht mit anderen Optionen kombinieren.

          Mit der Eingabe echo $- stellen Sie fest, welche Optionen bereits
          mit set oder sh bzw. ksh gesetzt sind. Gesetzte Optionen können
          bis auf -n und -t wieder zurückgesetzt werden, ohne daß die aktu-
          elle Shell beendet werden muß.

          In der Korn-Shell ksh existieren weitere Optionen [siehe ksh(1)].

     Folgende Optionen stehen zur Verfügung:

     -a   (a - automatic) In der aktuellen Shell werden ab sofort alle
          Shell-Variablen automatisch exportiert, die Sie neu definieren
          oder denen Sie einen anderen Wert zuweisen.

          -a nicht angegeben und noch nicht gesetzt:

          Neu definierte oder geänderte Shell-Variablen werden in der aktu-
          ellen Shell nicht automatisch exportiert. Nur wenn Sie eine
          Shell-Variable mit dem eingebauten Shell-Kommando export expor-
          tieren, ist sie in einer Subshell bekannt.

     +a   -a wird zurückgesetzt. Alle Shell-Variablen, die während gesetz-
          ter Option -a definiert wurden, werden auch weiterhin exportiert.

     -e   (e - exit) Die aktuelle Shell wird sofort beendet, falls ein Kom-
          mando den Endestatus ungleich 0 zurückgibt.

          -e nicht angegeben und noch nicht gesetzt:


Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

set(1)                                                               set(1)

          Eine Dialog-Shell beendet sich, wenn Sie CTRL-D drücken. Eine
          Shell, die eine Shell-Prozedur ausführt, beendet sich nur dann
          vorzeitig, wenn sie einen Syntaxfehler entdeckt. Sonst beendet
          sie sich, wenn die Shell-Prozedur abgearbeitet ist, unabhängig
          vom Endestatus der einzelnen Kommandos.

     +e   -e wird zurückgesetzt.

     -f   (f - file name) In der aktuellen Shell verlieren ab sofort die
          Zeichen Stern * und Fragezeichen ? und die eckigen Klammern [...]
          ihre Sonderbedeutung. Das bedeutet, daß die entsprechenden Zei-
          chenketten nicht durch passende Dateinamen ersetzt werden.

          -f nicht angegeben und noch nicht gesetzt:

          Entsprechende Zeichenketten werden durch passende Dateinamen
          ersetzt.

     +f   -f wird zurückgesetzt.

     -h   (h - hash) Die aktuelle Shell ändert ihr Verhalten bei der Defi-
          nition von Shell-Funktionen wie folgt: Wenn Sie eine Shell-Funk-
          tion definieren, trägt die Shell bereits alle innerhalb der Funk-
          tion verwendeten Kommandos in die Hash-Tabelle ein [siehe
          hash(1)].

          -h nicht angegeben und noch nicht gesetzt:

          Die innerhalb einer Shell-Funktion verwendeten Kommandos werden
          erst dann in die Hash-Tabelle eingetragen, wenn die Shell-Funk-
          tion ausgeführt wird.

     +h   -h wird zurückgesetzt.

     -k   (k - keyword) Variablenzuweisungen, also Angaben der Form
          name=wert, können Sie beim Aufruf eines Kommandos an beliebiger
          Stelle in der Kommandozeile angeben. Die Shell führt die Varia-
          blenzuweisung aus und trägt den entsprechenden Schlüsselwortpara-
          meter in die Ablaufumgebung dieses Kommandos ein (siehe Beispiel
          1).

          -k nicht angegeben und noch nicht gesetzt:

          Variablenzuweisungen müssen vor dem Kommandonamen stehen. Die
          Shell trägt die entsprechenden Schlüsselwortparameter in die
          Ablaufumgebung dieses Kommandos ein.

     +k   -k wird zurückgesetzt.






Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

set(1)                                                               set(1)

     -n   (n - no execution) Die aktuelle Shell liest und interpretiert
          alle Kommandos, führt sie aber nicht aus; d. h. der letzte
          Schritt bei der Bearbeitung einer Kommandozeile entfällt [siehe
          sh(1), WIE BEARBEITET DIE SHELL DIE KOMMANDOZEILE?].

          Mit -n können Sie feststellen, ob eine Shell-Prozedur Syntaxfeh-
          ler enthält.

          Vorsicht:
               Wenn Sie set -n im Dialog eingeben, können Sie die Option -n
               nur dadurch zurücksetzen, indem Sie die Shell mit CTRL-D
               beenden.

               In einer Shell-Prozedur können Sie die Option -n nicht
               zurücksetzen. Sie wird zurückgesetzt, wenn sich die Shell,
               die diese Shell-Prozedur ausführt, beendet.

          -n nicht angegeben und noch nicht gesetzt:

          Alle Kommandos werden gelesen, interpretiert und ausgeführt.

     -t   (t - terminate) Die aktuelle Shell beendet sich, wenn die aktu-
          elle Kommandozeile ausgeführt ist. Das ist die Zeile, die das
          Kommando set -t enthält.

          -t nicht angegeben:

          Eine Dialog-Shell beendet sich, wenn Sie CTRL-D drücken. Eine
          Shell, die eine Shell-Prozedur ausführt, beendet sich nur dann
          vorzeitig, wenn sie einen Syntaxfehler entdeckt. Sonst beendet
          sie sich, wenn die Shell-Prozedur abgearbeitet ist.

          Ist in der aktuellen Shell die Option -e gesetzt, beendet sie
          sich, sobald ein Kommando den Endestatus ungleich 0 zurückgibt.

     -u   (u - unset) Die aktuelle Shell gibt ab sofort eine Fehlermeldung
          aus, wenn sie in einer Kommandozeile auf eine Shell-Variable
          trifft, die nicht definiert ist. Das entsprechende Kommando wird
          nicht ausgeführt.

          Shell-Prozeduren werden abgebrochen, sobald die Shell auf eine
          nicht definierte Shell-Variable trifft.

          -u nicht angegeben und noch nicht gesetzt:

          Die Shell gibt keine Fehlermeldung aus, wenn eine verwendete
          Shell-Variable nicht definiert ist. Standardmäßig wird die leere
          Zeichenkette als Wert eingesetzt.

     +u   -u wird zurückgesetzt.




Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

set(1)                                                               set(1)

     -v   (v - verbose) Die aktuelle Shell schreibt ab sofort jede Eingabe
          ohne Änderungen auf die Standardfehlerausgabe. Erst dann wird das
          entsprechende Kommando ausgeführt.

          Zusammen mit der Option -x könnnen Sie so Shell-Prozeduren
          testen.

          -v nicht angegeben und noch nicht gesetzt:

          Die aktuelle Shell protokolliert die Eingabe nicht.

     +v   -v wird zurückgesetzt.

     -x   (x - execute) Die aktuelle Shell interpretiert die Eingabe und
          schreibt sie auf die Standardfehlerausgabe. Jedes so bearbeitete
          Kommando kennzeichnet die Shell mit einem Pluszeichen + am Zei-
          lenanfang. Besteht ein eingegebenes Kommando nur aus Variablenzu-
          weisungen, so wird es ohne + auf die Standardfehlerausgabe
          geschrieben. Anschließend wird das entsprechende Kommando ausge-
          führt.

          Im Gegensatz zur Ausgabe bei Option -v erkennen Sie an dieser
          Ausgabe, wie die Shell die angegebenen Sonderzeichen und Shell-
          Variablen ersetzt hat.

          Shell-Prozeduren können Sie also wie folgt testen:

          -  Tragen Sie set -xv als erstes Kommando in die entsprechende
             Shell-Prozedur ein oder

          -  führen Sie die entsprechende Shell-Prozedur aus mit dem Kom-
             mando sh -xv prozedur.

          -x nicht angegeben und noch nicht gesetzt:

          Die aktuelle Shell protokolliert die bearbeitete Eingabe nicht.

     +x   -x wird zurückgesetzt.

     --   Kann nicht mit anderen Optionen kombiniert werden.

          Das erste Argument, das Sie nach -- angeben, interpretiert set
          nicht als Option, auch wenn es mit einem Bindestrich - beginnt.
          Auf diese Weise können Sie mit set den Stellungsparameter $1 mit
          einer Zeichenkette versorgen, die mit einem Bindestrich beginnt
          (siehe dazu Beispiel 4).

          Mit set -- ändern Sie die aktuell gesetzten Optionen nicht. In
          der Korn-Shell ksh werden jedoch alle Stellungsparameter
          gelöscht!




Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

set(1)                                                               set(1)

     argument
          Beliebige Zeichenkette, die jeweils durch Leer- oder Tabulator-
          zeichen begrenzt wird. Das letzte Argument wird durch ein Komman-
          dotrennzeichen abgeschlossen.

          Sie können beliebig viele Argumente angeben, jeweils getrennt
          durch mindestens ein Tabulator- bzw. ein Leerzeichen.

          set versorgt die Stellungsparameter $1, $2, ... und $9 mit den
          ersten neun angegebenen Argumenten. Die Shell-Parameter $* und $@
          versorgt set mit allen angegebenen Argumenten und den Shell-
          Parameter $# mit der Anzahl der angegebenen Argumente. Sind weni-
          ger als neun Argumente angegeben, werden die restlichen Stel-
          lungsparameter mit der leeren Zeichenkette versorgt.

          Mit shift können Sie das zehnte und weitere Aufrufargumente
          direkt ansprechen.

          argument nicht angegeben:

          Die Stellungsparameter sowie die Shell-Parameter $@, $* und $#
          ändern sich nicht.

INTERNATIONALE UMGEBUNG
     Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
     texte. Wenn LCMESSAGES nicht oder als leere Zeichenkette definiert
     ist, wird der Wert von LANG als Standardwert herangezogen. Ist auch
     LANG nicht oder als leere Zeichenkette definiert, verhält sich das
     System so, als wäre es nicht internationalisiert.

     Die Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
     bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
     Bereich der Internationalisierung.

BEISPIELE
     Beispiel 1

     Die Shell-Prozedur archiv hat folgenden Inhalt:

     set | grep kunde
     echo $kunde

     In der aktuellen Shell wird die Option -k gesetzt und dann die Shell-
     Prozedur wie folgt ausgeführt:

     $ set -k
     $ sh archiv kunde=Meier
     kunde=Meier
     Meier





Seite 6                      Reliant UNIX 5.44               Gedruckt 11/98

set(1)                                                               set(1)

     Nach set -k kann die Shell-Variable kunde in der Kommandozeile nach
     dem Prozedurnamen definiert werden. Diese Variable ist aber nur inner-
     halb der Prozedur bekannt; im Beispiel greifen die Kommandos echo und
     set darauf zu.

     Nach Ablauf der Shell-Prozedur ist auch die Subshell beendet, die
     diese Prozedur ausgeführt hat. Die jetzt gültige Shell kennt die
     Variable kunde nicht. Das folgende Kommando gibt deshalb nichts aus:

     $ set | grep kunde

     Jetzt wird die Option -k zurückgesetzt. Wenn die Shell-Prozedur wieder
     genauso aufgerufen wird wie zuvor, ist die Shell-Variable kunde inner-
     halb der Prozedur nicht definiert. Das Kommando echo gibt nur eine
     Leerzeile aus.

     In diesem Fall muß also die Variablendefinition in der Kommandozeile
     vor dem Aufruf der Prozedur stehen.

     $ set +k
     $ sh archiv kunde=Meier
     $ kunde=Meier sh archiv
     kunde=Meier
     Meier

     Beispiel 2

     Die Shell-Prozedur evaltest hat folgenden Inhalt:

     set -xv
     eval echo \$$#
     echo $0

     Mit set werden die Optionen -x und -v in der Subshell gesetzt, die
     diese Shell-Prozedur ausführt. Die Shell-Prozedur wird aufgerufen:

     $ sh evaltest heute ist freitag
     eval echo \$$#
     + eval echo $3
     + echo freitag
     freitag
     echo $0
     + echo evaltest
     evaltest

     Die Option -v bewirkt, daß jedes Kommando vor der Bearbeitung unverän-
     dert ausgegeben wird.

     Die Option -x bewirkt, daß die Shell jede Kommandozeile interpretiert
     und mit einem + versehen ausgibt. Die Ausgabe zeigt, daß die Aufrufar-
     gumente des Kommandos eval von der Shell zweimal interpretiert werden.



Seite 7                      Reliant UNIX 5.44               Gedruckt 11/98

set(1)                                                               set(1)

     Beispiel 3

     Das Band einer eingelegten Magnetbandkassette soll vor dem ersten
     Zugriff nicht nachgespannt werden. Das Kommando mt(1) entnimmt der
     Shell-Variablen TAPE den Namen der Gerätedatei.

     Die entsprechende Shell-Prozedur mtno hat folgenden Inhalt:

     set -u
     mt -f $TAPE noret

     Weil die Option -u gesetzt ist, wird das Kommando mt nur ausgeführt,
     wenn die Shell-Variable definiert ist. So verhindern Sie, daß mt auf
     die Standardgerätedatei /dev/rmt0 zugreift.

     Wenn die Variable TAPE nicht definiert ist, bricht die Shell-Prozedur
     sofort mit der folgenden Fehlermeldung ab:

     $ sh mtno
     mtno: TAPE: parameter not set

     Beispiel 4

     Die folgende Shell-Prozedur zählt die Argumente, die von der Standard-
     eingabe gelesen werden. Allerdings ist sie etwas langsamer als das
     Kommando wc -w:

     1  : sh zaehl zaehlt alle Argumente auf Standardeingabe
     2  zahl=0
     3  while read zeile
     4  do
     5     set -- $zeile
     6     zahl=`expr $zahl + $#`
     7  done
     8  echo $zahl

     Zeile 3:

     Das eingebaute Shell-Kommando read liest eine Zeile von der Standard-
     eingabe und weist sie der Variablen zeile zu.

     Zeile 5:

     Das eingebaute Shell-Kommando set weist die Argumente, aus denen sich
     der Wert der Variablen zeile zusammensetzt, den Stellungsparametern
     $1, $2, ... zu; $# ist die Anzahl der Argumente, aus denen sich $zeile
     zusammensetzt.







Seite 8                      Reliant UNIX 5.44               Gedruckt 11/98

set(1)                                                               set(1)

     Die Option -- hat in diesem Beispiel zwei Funktionen:

     -  Wenn $zeile die leere Zeichenkette ist, gibt set trotzdem nicht die
        aktuelle Umgebung aus. (In der Korn-Shell ksh werden vorhandene
        Stellungsparameter gelöscht.)

     -  Wenn $zeile mit einem Bindestrich beginnt, interpretiert set das
        erste Argument aus $zeile nicht als Option.

     Zeile 6:

     Für jede gelesene Zeile addiert expr die Anzahl Argumente in dieser
     Zeile, also $# zum aktuellen Wert der Variablen zahl. Anschließend
     enthält zahl den neuen Wert.

     Die Kommandos in den Zeilen 5 und 6 werden so oft wiederholt, bis read
     die letzte Eingabezeile gelesen hat. Dann gibt echo den Inhalt der
     Variablen zahl aus; das ist die Anzahl aller eingegebenen Argumente.

HINWEISE
     set existiert sowohl als externes Kommando (/usr/bin/sh) als auch als
     eingebautes Shell-Kommando (Built-in), und zwar sowohl der Korn-Shell
     ksh(1) wie auch der Bourne-Shell sh(1). Für die Ausführung von
     /usr/bin/sh erzeugt die Shell einen neuen Prozeß.

     Bei der Verwendung von set können sich Abweichungen im Verhalten erge-
     ben, je nachdem, welche Shell benutzt wird. Die möglichen Abweichungen
     sind nicht eigens beschrieben.

SIEHE AUCH
     env(1), getopts(1), ksh(1), sh(1).























Seite 9                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026