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