(set or unset options and positional parameters)
Das in die POSIX-Shell sh eingebaute Kommando set hat drei Funktionen:
Ist kein Operand angegeben, gibt set die Namen und Werte aller Shell-Variablen, die für die aktuelle Shell definiert sind, auf die Standard-Ausgabe aus.
Das Kommando env dagegen gibt die Namen und Werte aller Shell-Variablen auf die Standard-Ausgabe aus, die an jedes aufgerufene Kommando und jede Subshell weitergereicht werden. Variablen wie IFS, MAILCHECK, PATH, PS1 und PS2 sind in dieser Ausgabe nur enthalten, 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 angeben, allerdings steuert sh den Ablauf der aufgerufenen Subshell.Mit Argumenten, die statt einer Option oder nach den Optionen angegeben sind, führt set folgendes aus:
die Stellungsparameter $1, $2, ... und $9 versorgt set mit den ersten neun angegebenenArgumenten,
die Shell-Parameter $* und $@ versorgt set mit allen angegebenen Argumenten,
den Shell-Parameter $# versorgt set mit der Anzahl der angegebenen Argumente.
Sind weniger als neun Argumente angegeben, werden die restlichen Stellungsparametermit der leeren Zeichenkette versorgt.
Mit shift können Sie das zehnte und weitere Aufruf-Argumente direkt ansprechen.
Wenn Sie mit set den Ablauf einer Shell-Prozedur beeinflussen wollen, müssen Sie dieses Kommando in die Prozedur schreiben, da Shell-Prozeduren immer von einer Subshell ausgeführt werden.
Syntax
Format 1: |
set [+|-AabCefhkmnuvx][ -t][-o option...][ argument...] |
Format 2: |
set -- [ argument...] |
Format 3: |
set - [ argument...] |
Kein Operand angegeben set gibt die Namen und Werte aller Shell-Variablen, die für die aktuelle Shell definiert sind, auf die Standard-Ausgabe aus. 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 weniger als neun Argumente angegeben, werden die restlichen Stellungsparameter mit der leeren Zeichenkette versorgt. Mit shift können Sie das zehnte und weitere Aufruf-Argumente direkt ansprechen.
steuert den Ablauf der aktuellen Shell. Wenn Sie mehrere Optionen angeben wollen, müssen Sie die entsprechenden Buchstaben ohne Leerzeichen aneinanderhängen. Der Bindestrich - 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 gesetzt sind. Gesetzte Optionen können bis auf -n und -t wieder zurückgesetzt werden, ohne dass die aktuelle Shell beendet werden muss. Folgende Optionen stehen zur Verfügung:
Wertzuweisung für Felder:
Verwenden Sie das Pluszeichen +A, dann werden die Werte vor der Zuweisung nicht gelöscht.
(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:
-a wird zurückgesetzt. Alle Shell-Variablen, die während gesetzter Option -a definiert wurden, werden auch weiterhin exportiert.
(b - background) Es werden alle beendeten Hintergrundjobs angezeigt. Folgende Meldung wird auf Standardfehlerausgabe geschrieben:
Das Zeichen „+“ kennzeichnet den Job, der als Standard für das fg oder bg Kommando verwendet wird. Der Job kann auch in Form job_id %+ oder %% gekennzeichnet werden. Das Zeichen „-“ kennzeichnet den Job, der Standard wird, wenn der aktuelle Standardjob beendet wird. Der Job kann auch in der Form job_id %- gekennzeichnet werden. Alle anderen Jobs werden durch ein Leerzeichen dargestellt. Es kann immer nur ein Job mit „+“ und nur ein Job mit „-“ gekennzeichnet sein.
Zahl, um die Prozessgruppe für die Kommandos wait, fg, bg und kill zu kennzeichnen. Werden diese Kommandos benutzt, wird der Jobnummer ein „%“ vorangestellt.
-b wird zurückgesetzt.
Verhindert das Überschreiben von Dateien bei Ausgabeumlenkung mit „>“. Wird die Ausgabe mit „>|“ umgelenkt, wird die noclobber Option für die einzelne Datei überlagert.
-C wird zurückgesetzt.
(e - exit) Die aktuelle Shell wird sofort beendet, falls ein Kommando den Ende-Status -e nicht angegeben und noch nicht gesetzt:
-e wird zurückgesetzt.
(f - file name) In der aktuellen Shell verlieren ab sofort die Zeichen Stern * und Fragezeichen ? und die eckigen Klammern [...] ihre Sonderbedeutung. Das bedeutet, dass die entsprechenden Zeichenketten nicht durch passende Dateinamen ersetzt werden. -f nicht angegeben und noch nicht gesetzt:
-f wird zurückgesetzt.
(h - hash) Die aktuelle Shell ändert ihr Verhalten bei der Definition von Shell-Funktionen wie folgt: Wenn Sie eine Shell-Funktion definieren, trägt die Shell bereits alle innerhalb der Funktion verwendeten Kommandos in die Hash-Tabelle ein (siehe hash). -h nicht angegeben und noch nicht gesetzt:
-h wird zurückgesetzt.
(k - keyword) Variablen-Zuweisungen, also Angaben der Form name=wert, können Sie beim Aufruf eines Kommandos an beliebiger Stelle in der Kommando-Zeile angeben. Die Shell führt die Variablen-Zuweisung aus und trägt den entsprechenden Schlüsselwortparameter in die Ablauf-Umgebung dieses Kommandos ein (siehe Beispiel 1). -k nicht angegeben und noch nicht gesetzt:
-k wird zurückgesetzt.
Hintergrundkommandos werden in einer eigenen Prozessgruppe ausgeführt. Die Beendigung wird in einer Zeile berichtet. Der Endestatus von Hintergrundaufträgen wird durch eine Beendigungsmeldung quittiert. Bei einer interaktiven POSIX-Shell wird diese Option automatisch eingeschaltet.
-m wird zurückgesetzt.
(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 Kommando-Zeile entfällt (siehe Abschnitt „Kommandos durch die POSIX-Shell verarbeiten“). Mit -n können Sie feststellen, ob eine Shell-Prozedur Syntax-Fehler enthält. Die Option -n wird von einer interaktiven Shell ignoriert. -n nicht angegeben und noch nicht gesetzt:
-n wird zurückgesetzt (außer in einer interaktiven Shell).
argument kann einer der folgenden Optionsnamen sein:
entspricht -a
entspricht -e
Alle Hintergrundaufträge werden mit niedrigerer Priorität ausgeführt. Dies ist die standardmäßige Voreinstellung.
Die POSIX-Shell wird nicht durch Dateiende beendet. Benutzen Sie dazu das eingebaute Kommando.
entspricht -k
Alle Dateiverzeichnisse, die bei der Dateinamen-Erzeugung entstehen,erhalten eine Schrägstrich / am Ende angefügt.
entspricht -m
Bei der Umlenkung der Ausgabe mit > werden keine existierenden Dateien überschrieben.
entspricht -n
entspricht -f
Funktionsdefinitionen werden nicht in der History-Datei gespeichert.
entspricht -u
entspricht -p
entspricht -v
entspricht -h
ist abhängig vom Wert der Variablen TERM. Ist TERM=BLOCK oder ist TERM nicht gesetzt, dann wird ein BS2000-Blockterminal angenommen und das Argument vi wird nicht unterstützt. Jeder andere Wert für TERM bedeutet ein Zeichenterminal. Das Argument vi versetzt Sie in den Eingabemodus eines vi-ähnlichen Zeilen-Editors, bis die ESC drücken. Sie befinden sich dann im Kommandomodus. Ein Neue-Zeile-Zeichen sendet die Zeile.
ist abhängig vom Wert der Variablen TERM. Ist TERM=BLOCK oder ist TERM nicht gesetzt, dann wird ein BS2000-Blockterminal angenommen und das Argument vi wird nicht unterstützt. Jeder andere Wert für TERM bedeutet ein Zeichenterminal. Mit dem Argument viraw wird bei eingeschaltetem vi-Modus jedes Zeichen bearbeitet, sobald es getippt wird.
entspricht -x
(t - terminate) Die aktuelle Shell beendet sich, wenn die aktuelle Kommando-Zeile ausgeführt ist. Das ist die Zeile, die das Kommando set -t enthält. -t nicht angegeben:
(u - unset) Die aktuelle Shell gibt ab sofort eine Fehlermeldung aus, wenn sie in einer Kommando-Zeile 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:
-u wird zurückgesetzt.
(v - verbose) Die aktuelle Shell schreibt ab sofort jede Eingabe ohne Änderungen auf die Standard-Fehlerausgabe. 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:
-v wird zurückgesetzt.
(x - execute) Die aktuelle Shell interpretiert die Eingabe und schreibt sie auf die Standard-Fehlerausgabe. Jedes so bearbeitete Kommando kennzeichnet die Shell mit einem Pluszeichen + am Zeilenanfang. Besteht ein eingegebenes Kommando nur aus Variablen-Zuweisungen, so wird es ohne + auf die Standard-Fehlerausgabe geschrieben. Anschließend wird das entsprechende Kommando ausgefü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:
-x nicht angegeben und noch nicht gesetzt:
-x wird zurückgesetzt.
beliebige Zeichenkette, die jeweils durch Leer- oder Tabulatorzeichen begrenzt wird. Das letzte Argument wird durch ein Kommando-Trennzeichen 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 weniger als neun Argumente angegeben, werden die restlichen Stellungsparameter mit der leeren Zeichenkette versorgt. Mit shift können Sie das zehnte und weitere Aufruf-Argumente direkt ansprechen. argument nicht angegeben: |
(Minuszeichen) 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 3). Mit set -- ändern Sie die aktuell gesetzten Optionen nicht.
beliebige Zeichenkette, die jeweils durch Leer- oder Tabulatorzeichen begrenzt wird. Das letzte Argument wird durch ein Kommando-Trennzeichen 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 weniger als neun Argumente angegeben, werden die restlichen Stellungsparameter mit der leeren Zeichenkette versorgt. Mit shift können Sie das zehnte und weitere Aufruf-Argumente direkt ansprechen. argument nicht angegeben: |
Die Optionen -x und -v werden zurückgesetzt.
set versorgt die Stellungsparameter $1, $2, ... und $9 mit den ersten neun angegebenen Argumenten. Sind weniger als neun Argumente angegeben, werden die restlichen Stellungsparameter mit der leeren Zeichenkette versorgt. argument nicht angegeben |
Internationale Umgebung
Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos set: LANG Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden. LC_ALL Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen. LC_CTYPE Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung. LC_MESSAGES Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden. NLSPATH Legt den Pfad der Meldungsdateien für LC_MESSAGES fest. |
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:
Nach set -k kann die Shell-Variable kunde in der Kommandozeile nach dem Prozedur-Namen definiert werden. Diese Variable ist aber nur innerhalb 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:
Jetzt wird die Option -k zurückgesetzt. Wenn die Shell-Prozedur wieder genauso aufgerufen wird wie zuvor, ist die Shell-Variable kunde innerhalb der Prozedur nicht definiert. Das Kommando echo gibt nur eine Leerzeile aus.
|
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:
Die Option -v bewirkt, dass jedes Kommando vor der Bearbeitung unverändert ausgegeben wird. Die Option -x bewirkt, dass die Shell jede Kommando-Zeile interpretiert und mit einem + versehen ausgibt. Die Ausgabe zeigt, dass die Aufruf-Argumente des Kommandos eval von der Shell zweimal interpretiert werden. |
Beispiel 3
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 Standard-Eingabe 2 zahl=0 3 while read zeile 4 do 5 set -- $zeile 6 zahl=`expr $zahl + $#` 7 done 8 echo $zahl Zeile 3: Zeile 5: Die Option -- hat in diesem Beispiel zwei Funktionen:
Zeile 6: Die Kommandos in den Zeilen 5 und 6 werden so oft wiederholt, bis read die letzte Eingabe-Zeile gelesen hat. Dann gibt echo den Inhalt der Variablen zahl aus; das ist die Anzahl aller eingegebenen Argumente. |
Siehe auch
env, getopts, typeset |