Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

set - Shell-Optionen oder Stellungsparameter setzen

&pagelevel(4)&pagelevel

(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...]



Format 1: set [+|-AabCefhkmnuvx][ -t][-o option...][ 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.

option

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:

-A name

Wertzuweisung für Felder:
Löscht den Wert der Variablen name und weist ihr dann sequentiell aus der argument-Liste Werte zu.

+A

Verwenden Sie das Pluszeichen +A, dann werden die Werte vor der Zuweisung nicht gelöscht.

-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 aktuellen Shell nicht automatisch exportiert. Nur wenn Sie eine Shell-Variable mit dem eingebauten sh-Kommando export exportieren, ist sie in einer Subshell bekannt.

+a

-a wird zurückgesetzt. Alle Shell-Variablen, die während gesetzter Option -a definiert

wurden, werden auch weiterhin exportiert.

-b  

(b - background)

Es werden alle beendeten Hintergrundjobs angezeigt. Folgende Meldung wird auf Standardfehlerausgabe geschrieben:

"[%d]%c %s%s\n", <job-number>,<current>,<status>,<job-name>

<current>

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.

<job-number>

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

-b wird zurückgesetzt.

-C

Verhindert das Überschreiben von Dateien bei Ausgabeumlenkung mit „>“. Wird die Ausgabe mit „>|“ umgelenkt, wird die noclobber Option für die einzelne Datei überlagert.

+C

-C wird zurückgesetzt.

-e

(e - exit)

Die aktuelle Shell wird sofort beendet, falls ein Kommando den Ende-Status <> 0 zurückgibt.

-e nicht angegeben und noch nicht gesetzt:
Eine Dialog-Shell beendet sich, wenn Sie CTLR+D drücken. Eine Shell, die eine Shell-Prozedur ausführt, beendet sich nur dann vorzeitig, wenn sie einen Syntax-Fehler 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, dass die entsprechenden Zeichenketten 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 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:
Die innerhalb einer Shell-Funktion verwendeten Kommandos werden erst dann in die Hash-Tabelle eingetragen, wenn die Shell-Funktion ausgeführt wird.

+h

-h wird zurückgesetzt.

-k

(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:
Variablen-Zuweisungen müssen vor dem Kommando-Namen stehen. Die Shell trägt die entsprechenden Schlüsselwortparameter in die Ablauf-Umgebung dieses Kommandos ein.

+k

-k wird zurückgesetzt.

-m

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

-m wird zurückgesetzt.

-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 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:
Alle Kommandos werden gelesen, interpretiert und ausgeführt.

+n

-n wird zurückgesetzt (außer in einer interaktiven Shell).

-o argument

argument kann einer der folgenden Optionsnamen sein:

allexport

entspricht -a

errexit

entspricht -e

bgnice

Alle Hintergrundaufträge werden mit niedrigerer Priorität ausgeführt. Dies ist die standardmäßige Voreinstellung.

ignoreeof

Die POSIX-Shell wird nicht durch Dateiende beendet. Benutzen Sie dazu das eingebaute Kommando.

keywords

entspricht -k

markdirs

Alle Dateiverzeichnisse, die bei der Dateinamen-Erzeugung entstehen,erhalten eine Schrägstrich / am Ende angefügt.

monitor

entspricht -m

noclobber

Bei der Umlenkung der Ausgabe mit > werden keine existierenden Dateien überschrieben.

noexec

entspricht -n

noglob

entspricht -f

nolog

Funktionsdefinitionen werden nicht in der History-Datei gespeichert.

nounset

entspricht -u

privileged

entspricht -p

verbose

entspricht -v

trackall

entspricht -h

vi

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.

viraw

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.

xtrace

entspricht -x

-t

(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:
Eine Dialog-Shell beendet sich, wenn Sie die CTRL+D drücken. Eine Shell, die eine Shell-Prozedur ausführt, beendet sich nur dann vorzeitig, wenn sie einen Syntax-Fehler 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 î 0 zurückgibt.

-u

(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:
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.

-v

(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:
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 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:

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

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

-x nicht angegeben und noch nicht gesetzt:
Die aktuelle Shell protokolliert die bearbeitete Eingabe nicht.

+x

-x wird zurückgesetzt.

argument

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 Stellungsparameter sowie die Shell-Parameter $@, $* und $# ändern sich nicht.



Format 2: set -- [ argument...]


--

(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.

argument

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 Stellungsparameter sowie die Shell-Parameter $@, $* und $# ändern sich nicht.



Format 3: set - [ argument...]


-

Die Optionen -x und -v werden zurückgesetzt.

argument

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.
Mit shift können Sie das zehnte und weitere Aufruf-Argumente direkt ansprechen.

argument nicht angegeben
Die Stellungsparameter ändern sich nicht.

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:

$ set -k

$ sh archiv kunde=Meier
kunde=Meier

Meier

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:

$ 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 innerhalb der Prozedur nicht definiert. Das Kommando echo gibt nur eine Leerzeile aus.
In diesem Fall muss also die Variablen-Definition 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, 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:
Das eingebaute sh-Kommando read liest eine Zeile von der Standard-Eingabe und weist sie der Variablen zeile zu.

Zeile 5:
Das eingebaute sh-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.

Die Option -- hat in diesem Beispiel zwei Funktionen:

  • Wenn $zeile die leere Zeichenkette ist, gibt set trotzdem nicht die aktuelle Umgebung aus.

  • 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 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