Handbücher für die Kommandozeile

Man » sh-Handbuch online - detaillierte Online-Dokumentation für die sh-Manpage

🌍
dash — Befehlsinterpreter (Shell)

SYNOPSIS

dash     [-aCefnuvxIimqVEbp]    [+aCefnuvxIimqVEbp]    [-o    option_name]    [+o    option_name]
[Befehlsdatei [Argument ...]]
dash -c [-aCefnuvxIimqVEbp] [+aCefnuvxIimqVEbp] [-o option_name] [+o option_name] Befehlszeichenfolge
[Befehlsname [Argument ...]]
dash -s [-aCefnuvxIimqVEbp] [+aCefnuvxIimqVEbp] [-o option_name] [+o option_name] [Argument ...]

BESCHREIBUNG

dash ist der Standard-Befehlsinterpreter für das System. Die aktuelle Version von dash wird so
geändert, dass sie den POSIX 1003.2- und 1003.2a-Spezifikationen für die Shell entspricht.
Diese Version hat viele Funktionen, die sie in einigen Aspekten der Korn-Shell ähneln lassen, aber
es handelt sich nicht um einen Korn-Shell-Klon (siehe ksh(1)). Nur Funktionen, die von POSIX sowie
einige Berkeley-Erweiterungen festgelegt sind, werden in diese Shell integriert. Diese Manpage ist
nicht als Tutorial oder als vollständige Spezifikation der Shell gedacht.

Übersicht

Die Shell ist ein Befehl, der Zeilen entweder aus einer Datei oder vom Terminal liest, sie interpretiert und im Allgemeinen andere Befehle ausführt. Es ist das Programm, das ausgeführt wird, wenn sich ein Benutzer bei dem System anmeldet (obwohl ein Benutzer eine andere Shell mit dem Befehl chsh(1) auswählen kann). Die Shell implementiert eine Sprache, die Flusssteuerungskonstrukte, eine Makro-Funktion, die eine Vielzahl von Funktionen zusätzlich zur Datenspeicherung bietet, sowie integrierte Funktionen für die Historie und die Bearbeitung von Zeilen enthält. Sie enthält viele Funktionen, die die interaktive Verwendung unterstützen, und hat den Vorteil, dass die interpretative Sprache sowohl für die interaktive als auch für die nicht-interaktive Verwendung (Shell-Skripte) gleich ist. Das heißt, Befehle können direkt an die laufende Shell eingegeben oder in eine Datei geschrieben und die Datei kann direkt von der Shell ausgeführt werden.

Aufruf

Wenn keine Argumente vorhanden sind und wenn die Standardeingabe der Shell mit einem Terminal verbunden ist (oder wenn das -i-Flag gesetzt ist) und die -c-Option nicht vorhanden ist, wird die Shell als interaktive Shell betrachtet. Eine interaktive Shell fordert in der Regel vor jedem Befehl auf und behandelt Programmier- und Befehlsfehler anders (wie unten beschrieben). Beim Start untersucht die Shell das Argument 0. Wenn es mit einem Bindestrich (-) beginnt, wird die Shell ebenfalls als Login-Shell betrachtet. Dies geschieht normalerweise automatisch durch das System, wenn sich der Benutzer zum ersten Mal anmeldet. Eine Login-Shell liest zuerst die Befehle aus den Dateien /etc/profile und .profile, falls diese vorhanden sind. Wenn die Umgebungsvariable ENV beim Aufruf einer interaktiven Shell gesetzt ist oder in der Datei .profile einer Login-Shell gesetzt wird, liest die Shell als Nächstes die Befehle aus der in ENV angegebenen Datei. Daher sollte ein Benutzer Befehle, die nur beim Anmelden ausgeführt werden sollen, in die Datei .profile legen, und Befehle, die für jede interaktive Shell ausgeführt werden sollen, in die Datei ENV. Um die Variable ENV auf eine Datei zu setzen, legen Sie die folgende Zeile in der Datei .profile in Ihrem Home-Verzeichnis ab.


    ENV=$HOME/.shinit; export ENV

    Ersetzen Sie „.shinit“ durch einen beliebigen Dateinamen.

Wenn neben den Optionen Befehlszeilenargumente angegeben wurden, behandelt die Shell das erste Argument als den Namen einer Datei, aus der Befehle gelesen werden (ein Shell-Skript), und die verbleibenden Argumente werden als Positionsargumente der Shell ($1, $2 usw.) festgelegt. Andernfalls liest die Shell Befehle von ihrer Standardeingabe.

Verarbeitung der Argumentliste

Alle Einzelbuchstabenoptionen, die einen entsprechenden Namen haben, können als Argument für die Option -o verwendet werden. Die Form set -o name wird in der folgenden Beschreibung neben der Einzelbuchstabenoption angegeben. Durch die Angabe eines Bindestrichs - wird die Option aktiviert, während die Verwendung eines Pluszeichens + die Option deaktiviert. Die folgenden Optionen können über die Befehlszeile oder mit dem Befehl set (der später beschrieben wird) festgelegt werden.

    -a allexport     Exportiert alle zugewiesenen Variablen.

    -c               Liest Befehle aus dem Operanden `command_string` anstelle der Standardeingabe. Der spezielle Parameter 0 wird aus dem Operanden `command_name` gesetzt, und die Positionsargumente

($1, $2 usw.) werden aus den verbleibenden Argumentoperanden gesetzt.

    -C noclobber     Überschreibt vorhandene Dateien mit `>` nicht.

    -e errexit       Wenn nicht interaktiv, wird das Skript sofort beendet, wenn ein nicht getesteter Befehl fehlschlägt. Der Exit-Status eines Befehls wird als explizit getestet betrachtet, wenn der

Befehl zur Steuerung eines if, elif, while oder until verwendet wird oder wenn der Befehl der linke Operand eines &&- oder ||-Operators ist.

    -f noglob        Deaktiviert die Pfadnamenerweiterung.

    -n noexec        Wenn nicht interaktiv, werden die Befehle gelesen, aber nicht ausgeführt. Dies ist nützlich, um die Syntax von Shell-Skripten zu überprüfen.

    -u nounset       Schreibt eine Meldung an die Standardfehlerausgabe, wenn versucht wird, eine nicht definierte Variable zu erweitern, und beendet das Skript sofort, wenn die Shell nicht interaktiv

ist.

    -v verbose       Die Shell schreibt ihre Eingabe in die Standardfehlerausgabe, während sie gelesen wird. Nützlich zum Debuggen.

    -x xtrace        Schreibt jeden Befehl in die Standardfehlerausgabe (vorangestellt durch ein `+ `), bevor er ausgeführt wird. Nützlich zum Debuggen.

    -I ignoreeof     Ignoriert EOFs von der Eingabe, wenn interaktiv.

    -i interactive   Erzwingt, dass die Shell interaktiv arbeitet.

    -l               Lässt dash so verhalten, als wäre es als Login-Shell aufgerufen worden.

    -m monitor       Aktiviert die Jobsteuerung (wird automatisch aktiviert, wenn interaktiv).

    -s stdin         Liest Befehle aus der Standardeingabe (wird automatisch aktiviert, wenn keine Dateiarqumente vorhanden sind). Diese Option hat keine Wirkung, wenn sie nach dem Start der Shell mit

^ et festgelegt wird.


    -V vi            Aktiviert den integrierten vi(1)-Befehlszeilen-Editor (deaktiviert -E, falls dieser gesetzt wurde).

    -E emacs         Aktiviert den integrierten [emacs]({filename}../../emacs)(1)-Befehlszeilen-Editor (deaktiviert -V, falls dieser gesetzt wurde).

    -b notify        Aktiviert die asynchrone Benachrichtigung über die Fertigstellung von Hintergrundjobs. (NICHT IMPLEMENTIERT für 4.4alpha)

    -p priviliged    Versucht nicht, die effektive UID zurückzusetzen, wenn sie nicht mit der UID übereinstimmt. Dies ist standardmäßig nicht gesetzt, um eine falsche Verwendung durch

setuid-Root-Programme über system(3) oder popen(3) zu vermeiden.

Lexikalische Struktur

Die Shell liest Eingaben zeilenweise aus einer Datei und zerlegt sie in Wörter, wobei Leerzeichen (Leerzeichen und Tabulatoren) und bestimmte Zeichenfolgen, die für die Shell spezifisch sind, als "Operatoren" bezeichnet werden, als Trennzeichen dienen. Es gibt zwei Arten von Operatoren: Kontrolloperatoren und Umleitungsoperatoren (deren Bedeutung wird später erläutert). Im Folgenden finden Sie eine Liste der Operatoren:

Kontrolloperatoren: & && ( ) ; ;; | ||

Umleitungsoperatoren: < > >| << >> <& >& <<- <>

Anführungszeichen

Anführungszeichen werden verwendet, um die besondere Bedeutung bestimmter Zeichen oder Wörter für die Shell zu entfernen, z. B. Operatoren, Leerzeichen oder Schlüsselwörter. Es gibt drei Arten von Anführungszeichen: einfache Anführungszeichen, doppelte Anführungszeichen und Backslash.

Backslash
    Ein Backslash bewahrt die wörtliche Bedeutung des folgenden Zeichens, mit Ausnahme von ⟨newline⟩. Ein Backslash vor einem ⟨newline⟩ wird als Zeilenfortsetzung behandelt.

Einfache Anführungszeichen

Das Einschließen von Zeichen in einfache Anführungszeichen bewahrt die wörtliche Bedeutung aller Zeichen (mit Ausnahme einfacher Anführungszeichen, wodurch es unmöglich wird, einfache Anführungszeichen in eine mit einfachen Anführungszeichen versehene Zeichenfolge einzufügen).

Doppelte Anführungszeichen

Das Einschließen von Zeichen in doppelte Anführungszeichen bewahrt die wörtliche Bedeutung aller Zeichen, mit Ausnahme des Dollarzeichens ($), des Backticks () und des Backslashs (\\). Der Backslash in doppelten Anführungszeichen ist historisch gesehen etwas ungewöhnlich und dient dazu, nur die folgenden Zeichen zu maskieren: $ " \ . Andernfalls bleibt es wörtlich.

Reservierte Wörter

Reservierte Wörter sind Wörter, die eine besondere Bedeutung für die Shell haben und am Anfang einer Zeile und nach einem Kontrolloperator erkannt werden. Die folgenden sind reservierte Wörter:

    !       elif    fi      while   case
    else    for     then    {       }
    do      done    until   if      esac

Ihre Bedeutung wird später erläutert.

Alias

Ein Alias ist ein Name und der zugehörige Wert, der mit dem integrierten Befehl alias(1) festgelegt wird. Wann immer ein reserviertes Wort vorkommen kann (siehe oben), und nachdem die reservierten Wörter überprüft wurden, überprüft die Shell, ob das Wort mit einem Alias übereinstimmt. Wenn dies der Fall ist, ersetzt sie es in dem Eingabestrom durch seinen Wert. Wenn beispielsweise ein Alias namens "lf" mit dem Wert "ls -F" vorhanden ist, wird die Eingabe:

    lf foobar ⟨return⟩

    zu

    ls -F foobar ⟨return⟩

Alias bieten eine bequeme Möglichkeit für unerfahrene Benutzer, Abkürzungen für Befehle zu erstellen, ohne sich mit der Erstellung von Funktionen mit Argumenten befassen zu müssen. Sie können auch verwendet werden, um lexikalisch undurchsichtigen Code zu erstellen. Diese Verwendung wird nicht empfohlen.


Befehle

Die Shell interpretiert die gelesenen Wörter gemäß einer Sprache, deren Spezifikation außerhalb des Rahmens dieser Manpage liegt (siehe die BNF im POSIX 1003.2-Dokument). Im Wesentlichen wird jedoch eine Zeile gelesen, und wenn das erste Wort der Zeile (oder nach einem Kontrolloperator) kein reserviertes Wort ist, hat die Shell einen einfachen Befehl erkannt. Andernfalls wurde möglicherweise ein komplexer Befehl oder eine andere spezielle Konstruktion erkannt.

Einfache Befehle

Wenn ein einfacher Befehl erkannt wurde, führt die Shell die folgenden Aktionen aus:

      Führende Wörter der Form „Name=Wert“ werden entfernt und der Umgebung des einfachen Befehls zugewiesen. Umleitungsoperatoren und ihre Argumente (wie unten beschrieben) werden entfernt und zur späteren Verarbeitung gespeichert.

      Die verbleibenden Wörter werden wie im Abschnitt „Erweiterungen“ beschrieben erweitert, und das erste verbleibende Wort wird als Befehlsname betrachtet, und der Befehl wird gefunden. Die restlichen Wörter werden als Argumente des Befehls betrachtet. Wenn kein Befehlsname gefunden wurde, wirken die in Punkt 1 erkannten Variablenzuweisungen „Name=Wert“ auf die aktuelle Shell aus.

      Umleitungen werden wie im nächsten Abschnitt beschrieben durchgeführt.

Umleitungen

Umleitungen werden verwendet, um zu ändern, wo ein Befehl seine Eingabe liest oder seine Ausgabe sendet. Im Allgemeinen öffnen, schließen oder duplizieren Umleitungen einen vorhandenen Dateideskriptor. Das allgemeine Format für eine Umleitung lautet:

[n] redir-op Datei

wobei redir-op einer der zuvor genannten Umleitungsoperatoren ist. Im Folgenden finden Sie eine Liste der möglichen Umleitungen. [n] ist eine optionale Zahl zwischen 0 und 9, z. B. „3“ (nicht „[3]“), die sich auf einen Dateideskriptor bezieht.

[n]> Datei Leitet die Standardausgabe (oder n) in die Datei um.

[n]>| Datei Dasselbe, überschreibt aber die Option -C.

[n]>> Datei Fügt die Standardausgabe (oder n) an die Datei an.

[n]< Datei Leitet die Standardeingabe (oder n) aus der Datei um.

[n1]<&n2 Kopiert den Dateideskriptor n2 als Standardausgabe (oder Dateideskriptor n1). Dateideskriptor n2.

[n]<&- Schließt die Standardeingabe (oder n).

[n1]>&n2 Kopiert den Dateideskriptor n2 als Standardeingabe (oder Dateideskriptor n1). Dateideskriptor n2.

[n]>&- Schließt die Standardausgabe (oder n).

[n]<> Datei Öffnet die Datei zum Lesen und Schreiben auf der Standardeingabe (oder n).

Die folgende Umleitung wird oft als „Here-Dokument“ bezeichnet.

[n]<< Trennzeichen
Here-Dokument-Text ...
Trennzeichen

Der gesamte Text in den nachfolgenden Zeilen bis zum Trennzeichen wird gespeichert und dem Befehl über die Standardeingabe oder den Dateideskriptor n (falls angegeben) zur Verfügung gestellt. Wenn das auf der ersten Zeile angegebene Trennzeichen in Anführungszeichen steht, wird der Here-Dokument-Text wörtlich behandelt. Andernfalls wird der Text der Parametererweiterung, der Befehlssubstitution und der arithmetischen Erweiterung unterzogen (wie im Abschnitt „Erweiterungen“ beschrieben). Wenn der Operator „<<-“ anstelle von „<<“ lautet, werden führende Leerzeichen im Here-Dokument-Text entfernt.

Suchen und Ausführen

Es gibt drei Arten von Befehlen: Shell-Funktionen, interne Befehle und normale Programme – und der Befehl wird (nach Namen) in dieser Reihenfolge gesucht. Sie werden jeweils auf unterschiedliche Weise ausgeführt.

Wenn eine Shell-Funktion ausgeführt wird, werden alle Shell-Positionsargumente (mit Ausnahme von $0, das unverändert bleibt) auf die Argumente der Shell-Funktion gesetzt. Die Variablen, die explizit in die Umgebung des Befehls eingefügt werden (durch das Setzen von Zuweisungen für sie vor dem Funktionsnamen), werden für die Funktion lokal verfügbar gemacht und auf die angegebenen Werte gesetzt. Dann wird der in der Funktionsdefinition angegebene Befehl ausgeführt. Die Positionsargumente werden nach Abschluss des Befehls auf ihre ursprünglichen Werte zurückgesetzt. All dies geschieht innerhalb der aktuellen Shell.

Interne Shell-Befehle werden intern in der Shell ausgeführt, ohne einen neuen Prozess zu starten.

Andernfalls, wenn der Befehlsname nicht mit einer Funktion oder einem internen Befehl übereinstimmt, wird der Befehl als normales Programm im Dateisystem gesucht (wie im nächsten Abschnitt beschrieben). Wenn ein normales Programm ausgeführt wird, führt die Shell das Programm aus und übergibt die Argumente und die Umgebung an das Programm. Wenn das Programm keine normale ausführbare Datei ist (d. h., wenn es nicht mit der „magischen Zahl“ beginnt, deren ASCII-Darstellung „#!“ ist, sodass execve(2) ENOEXEC zurückgibt), interpretiert die Shell das Programm in einer Subshell. Die Kind-Shell wird in diesem Fall neu initialisiert, sodass der Effekt so ist, als ob eine neue Shell aufgerufen worden wäre, um das Ad-hoc-Shell-Skript zu verarbeiten, mit der Ausnahme, dass der Speicherort der in der übergeordneten Shell gespeicherten Befehle von der Kind-Shell beibehalten wird.

Beachten Sie, dass frühere Versionen dieses Dokuments und der Quellcode selbst irreführend und sporadisch ein Shell-Skript ohne magische Zahl als „Shell-Prozedur“ bezeichnen.

Pfadsuche

Beim Auffinden eines Befehls sucht die Shell zunächst, ob es eine Shell-Funktion mit diesem Namen gibt. Dann sucht sie nach einem internen Befehl mit diesem Namen. Wenn kein interner Befehl gefunden wird, gibt es zwei Möglichkeiten:

  • Befehlsnamen, die einen Schrägstrich enthalten, werden einfach ohne jegliche Suche ausgeführt.

  • Die Shell durchsucht jede im PATH angegebene Einträge nacheinander nach dem Befehl. Der Wert der Variablen PATH sollte eine Reihe von durch Doppelpunkte getrennten Einträgen sein. Jeder Eintrag besteht aus einem Verzeichnisnamen. Das aktuelle Verzeichnis kann implizit durch einen leeren Verzeichnisnamen oder explizit durch einen einzelnen Punkt angegeben werden.

Befehlsausgangsstatus

Jeder Befehl hat einen Ausgangsstatus, der das Verhalten anderer Shell-Befehle beeinflussen kann. Das Paradigma ist, dass ein Befehl mit Null für normal oder Erfolg und mit einem Wert ungleich Null für Fehler oder eine falsche Angabe beendet. Die Manpage für jeden Befehl sollte die verschiedenen Ausgangscodes und deren Bedeutung angeben. Darüber hinaus geben die internen Befehle Ausgangscodes zurück, ebenso wie eine ausgeführte Shell-Funktion.


Wenn ein Befehl ausschließlich aus Variablenzuweisungen besteht, ist der Exit-Status des Befehls der des letzten Befehls, der eine Substitution durchgeführt hat, falls vorhanden, andernfalls 0.

Komplexe Befehle

Komplexe Befehle sind Kombinationen aus einfachen Befehlen mit Kontrolloperatoren oder reservierten Wörtern, die zusammen einen größeren komplexen Befehl bilden. Im Allgemeinen ist ein Befehl eines der folgenden Elemente:

einfacher Befehl

Pipeline

Liste oder zusammengesetzte Liste

zusammengesetzter Befehl

Funktionsdefinition

Sofern nicht anders angegeben, ist der Exit-Status eines Befehls der Exit-Status des letzten einfachen Befehls, der von dem Befehl ausgeführt wurde.

Pipelines

Eine Pipeline ist eine Sequenz aus einem oder mehreren Befehlen, die durch den Kontrolloperator | getrennt sind. Die Standardausgabe aller Befehle außer dem letzten wird mit der Standardeingabe des nächsten Befehls verbunden. Die Standardausgabe des letzten Befehls wird wie üblich vom Shell übernommen.

Das Format für eine Pipeline ist:

[!] Befehl1 [| Befehl2 ...]

Die Standardausgabe von Befehl1 wird mit der Standardeingabe von Befehl2 verbunden. Die Standardeingabe, Standardausgabe oder beides eines Befehls werden als durch die Pipeline zugewiesen betrachtet, bevor eine durch die Umleitungsoperatoren, die Teil des Befehls sind, angegebene Umleitung erfolgt.

Wenn die Pipeline nicht im Hintergrund ausgeführt wird (siehe später), wartet die Shell, bis alle Befehle abgeschlossen sind.

Wenn die Option pipefail aktiviert war, als die Shell mit der Ausführung der Pipeline begann, ist der Exit-Status der Pipeline der Exit-Status des letzten in der Pipeline angegebenen Befehls, der mit einem Exit-Status ungleich Null beendet wurde, oder Null, wenn alle Befehle in der Pipeline mit einem Exit-Status von Null beendet wurden. Wenn die Option pipefail nicht aktiviert war, ist der Exit-Status der Pipeline der Exit-Status des letzten in der Pipeline angegebenen Befehls; die Exit-Status aller anderen Befehle werden nicht verwendet. Wenn dem reservierten Wort ! die Pipeline vorangestellt ist, ist der Exit-Status das logische NICHT des oben beschriebenen Exit-Status.

Da die Zuweisung der Standardeingabe oder Standardausgabe oder beides durch eine Pipeline vor einer Umleitung stattfindet, kann diese durch eine Umleitung geändert werden. Zum Beispiel:

$ Befehl1 2>&1 | Befehl2

sendet sowohl die Standardausgabe als auch die Standardfehlerausgabe von Befehl1 an die Standardeingabe von Befehl2.

Ein `;` oder ein `<newline>`-Terminator bewirkt, dass die vorhergehende AND-OR-Liste (siehe unten) sequenziell ausgeführt wird; ein `&` bewirkt die asynchrone Ausführung der vorhergehenden AND-OR-Liste.

Beachten Sie, dass im Gegensatz zu einigen anderen Shells jeder Prozess in der Pipeline ein Kind der aufrufenden Shell ist (es sei denn, es handelt sich um ein Shell-Builtin, in diesem Fall wird es in der aktuellen Shell ausgeführt – aber jede Auswirkung auf die Umgebung wird gelöscht).

Befehle im Hintergrund – &

Wenn ein Befehl mit dem Kontrolloperator & abgeschlossen wird, führt die Shell den Befehl asynchron aus – das heißt, die Shell wartet nicht, bis der Befehl abgeschlossen ist, bevor sie den nächsten Befehl ausführt.

Das Format für die Ausführung eines Befehls im Hintergrund ist:


command1 & [command2 & ...]

Wenn die Shell nicht interaktiv ist, wird die Standardeingabe eines asynchronen Befehls auf /dev/null gesetzt.

Listen – Im Allgemeinen

Eine Liste ist eine Sequenz von null oder mehr Befehlen, die durch Zeilenumbrüche, Semikolons oder kaufmännische Zeichen getrennt sind, und optional durch eines dieser drei Zeichen abgeschlossen wird. Die Befehle in einer Liste werden in der Reihenfolge ausgeführt, in der sie geschrieben sind. Wenn auf einen Befehl ein kaufmännisches Zeichen folgt, startet die Shell den Befehl und fährt sofort mit dem nächsten Befehl fort; andernfalls wartet sie, bis der Befehl beendet ist, bevor sie mit dem nächsten Befehl fortfährt.

Kurzschluss-Listenoperatoren

„&&“ und „||“ sind UND-ODER-Listenoperatoren. „&&“ führt zuerst den ersten Befehl aus und dann den zweiten Befehl, aber nur, wenn der Exit-Status des ersten Befehls Null ist. „||“ ist ähnlich, führt aber den zweiten Befehl aus, wenn und nur wenn der Exit-Status des ersten Befehls ungleich Null ist. „&&“ und „||“ haben beide die gleiche Priorität.

Flusssteuerkonstrukte – if, while, for, case

Die Syntax des Befehls if lautet

if liste
dann liste
[ elif liste
dann liste ] ...
[ else liste ]
fi

Die Syntax des Befehls while lautet

while liste
do liste
done

Die beiden Listen werden wiederholt ausgeführt, solange der Exit-Status der ersten Liste Null ist. Der Befehl until ist ähnlich, verwendet aber das Wort until anstelle von while, wodurch er sich wiederholt, bis der Exit-Status der ersten Liste Null ist.

Die Syntax des Befehls for lautet

for variable [ in [ wort ... ] ]
do liste
done

Die Wörter nach in werden erweitert, und dann wird die Liste wiederholt ausgeführt, wobei die Variable jeweils auf eines der Wörter eingestellt wird. Das Weglassen von in wort ... ist gleichbedeutend mit in "$@".

Die Syntax der Befehle break und continue lautet

break [ num ]
continue [ num ]

Break beendet die num innersten for- oder while-Schleifen. Continue setzt die nächste Iteration der innersten Schleife fort. Diese werden als integrierte Befehle implementiert.

Die Syntax des Befehls case lautet

case wort in
[(]muster) liste ;;
...
esac

Das Muster kann tatsächlich ein oder mehrere Muster (siehe „Shell-Muster“, die später beschrieben werden) sein, getrennt durch „|“-Zeichen. Das „(“ vor dem Muster ist optional.

Befehle gruppieren

Befehle können gruppiert werden, indem entweder geschrieben wird

(liste)

oder

{ liste; }

Die erste dieser beiden führt die Befehle in einer Subshell aus. Integrierte Befehle, die in eine (liste) gruppiert werden, wirken sich nicht auf die aktuelle Shell aus. Die zweite Form verzweigt nicht in eine andere Shell, ist also etwas effizienter. Durch das Gruppieren von Befehlen auf diese Weise können Sie deren Ausgabe so umleiten, als wären sie ein einziges Programm:

{ printf " hallo " ; printf " welt\n" ; } > gruss

Beachten Sie, dass „}“ einem Kontrolloperator folgen muss (hier „;“), damit es als reserviertes Wort und nicht als weiteres Befehlsargument erkannt wird.

Funktionen

Die Syntax einer Funktionsdefinition lautet

name () befehl

Eine Funktionsdefinition ist eine ausführbare Anweisung; wenn sie ausgeführt wird, wird eine Funktion mit dem Namen name installiert und ein Exit-Status von Null zurückgegeben. Der Befehl ist normalerweise eine Liste, die zwischen „{“ und „}“ eingeschlossen ist.

Variablen können mit dem Befehl local als lokal für eine Funktion deklariert werden. Dieser sollte als erste Anweisung der Funktion erscheinen, und die Syntax lautet:

local [variable | -] ...

^ ocal wird als eingebauter Befehl implementiert.

Wenn eine Variable lokal gemacht wird, erbt sie den Anfangswert sowie die Flags für Export und Nur-Lese-Zugriff von der Variable mit demselben Namen im umgebenden Gültigkeitsbereich, falls eine solche vorhanden ist. Andernfalls ist die Variable anfänglich nicht gesetzt. Die Shell verwendet eine dynamische Gültigkeitsbereichsregelung, so dass, wenn Sie die Variable x lokal für die Funktion f machen, die dann die Funktion g aufruft, Referenzen auf die Variable x, die innerhalb von g gemacht werden, sich auf die Variable x beziehen, die innerhalb von f deklariert wurde, und nicht auf die globale Variable mit dem Namen x.

Die einzige spezielle Variable, die lokal gemacht werden kann, ist “-“. Das lokale Definieren von “-“ bewirkt, dass alle Shell-Optionen, die innerhalb der Funktion über den Befehl set geändert werden, auf ihre ursprünglichen Werte zurückgesetzt werden, wenn die Funktion zurückkehrt.

Die Syntax des Befehls return lautet:

return [exitstatus]

Er beendet die aktuell ausgeführte Funktion. return wird als eingebauter Befehl implementiert.

Variablen und Parameter

Die Shell führt eine Reihe von Parametern. Ein Parameter, der durch einen Namen bezeichnet wird, wird als Variable bezeichnet. Beim Start wandelt die Shell alle Umgebungsvariablen in Shell-Variablen um. Neue Variablen können mit folgender Form gesetzt werden:

name=value

Variablen, die vom Benutzer gesetzt werden, müssen einen Namen haben, der ausschließlich aus Buchstaben, Zahlen und Unterstrichen besteht – wobei der erste nicht numerisch sein darf. Ein Parameter kann auch durch eine Zahl oder ein Sonderzeichen bezeichnet werden, wie unten erläutert.

Positionale Parameter

Ein positional Parameter ist ein Parameter, der durch eine Zahl (n > 0) bezeichnet wird. Die Shell setzt diese anfänglich auf die Werte ihrer Befehlszeilenargumente, die auf den Namen des Shell-Skripts folgen. Der eingebettete Befehl set kann auch verwendet werden, um sie zu setzen oder zurückzusetzen.

Spezielle Parameter

Ein spezieller Parameter ist ein Parameter, der durch eines der folgenden Sonderzeichen bezeichnet wird. Der Wert des Parameters ist neben seinem Zeichen aufgeführt.

*            Erweitert sich zu den positional Parametern, beginnend mit eins. Wenn die Erweiterung innerhalb einer doppelt zitierten Zeichenkette auftritt, erweitert sie sich zu einem einzigen Feld mit dem Wert jedes Parameters, getrennt durch das erste Zeichen der Variable `IFS`, oder durch ein Leerzeichen (` `), wenn `IFS` nicht gesetzt ist.

@            Erweitert sich zu den positional Parametern, beginnend mit eins. Wenn die Erweiterung innerhalb von doppelten Anführungszeichen auftritt, erweitert sich jeder positional Parameter als ein separates Argument. Wenn es keine positional Parameter gibt, erzeugt die Erweiterung von `@` null Argumente, auch wenn `@` doppelt zitiert ist. Was dies im Wesentlichen bedeutet, zum Beispiel, ist, wenn `$1` „abc“ ist und `$2` „def ghi“ ist, dann erweitert sich `"$@"` zu den beiden Argumenten:
"abc" "def ghi"
#            Erweitert sich zu der Anzahl der positional Parameter.

?            Wird zur Exit-Status des zuletzt ausgeführten Pipelines erweitert.

- (Bindestrich.) Wird zu den aktuellen Optionsflaggen (die einzelnen Buchstaben der Optionsnamen, die zu einer Zeichenkette verkettet werden) erweitert, wie sie beim Aufruf, mit dem Befehl `set` oder implizit durch die Shell angegeben wurden.

$            Wird zu der Prozess-ID der aufgerufenen Shell erweitert. Eine Subshell behält denselben Wert für $ wie ihr übergeordnetes Shell-Programm bei.

!            Wird zu der Prozess-ID des zuletzt ausgeführten Hintergrundbefehls von der aktuellen Shell erweitert. Für eine Pipeline ist die Prozess-ID die des letzten Befehls in der Pipeline.

0 (Null.)    Wird zum Namen der Shell oder des Shell-Skripts erweitert.

Worterweiterungen

Dieser Abschnitt beschreibt die verschiedenen Erweiterungen, die auf Wörter angewendet werden. Nicht alle Erweiterungen werden auf jedes Wort angewendet, wie später erläutert wird.

Tilde-Erweiterungen, Parametererweiterungen, Befehlssubstitutionen, arithmetische Erweiterungen und Anführungszeichenentfernungen, die innerhalb eines einzelnen Wortes stattfinden, werden zu einem einzelnen Feld erweitert. Nur die Feldaufteilung oder die Pfadnamenerweiterung kann aus einem einzelnen Wort mehrere Felder erstellen. Die einzige Ausnahme von dieser Regel ist die Erweiterung des speziellen Parameters @ innerhalb von doppelten Anführungszeichen, wie oben beschrieben.

Die Reihenfolge der Wort-Erweiterung ist:

      Tilde-Erweiterung, Parametererweiterung, Befehlssubstitution, arithmetische Erweiterung (diese finden alle gleichzeitig statt).

      Die Feldaufteilung wird auf die in Schritt (1) erzeugten Felder angewendet, es sei denn, die Variable IFS ist null.

      Pfadnamenerweiterung (es sei denn, `set -f` ist aktiv).

      Entfernung von Anführungszeichen.

Das Zeichen $ wird verwendet, um eine Parametererweiterung, eine Befehlssubstitution oder eine arithmetische Auswertung einzuleiten.

Tilde-Erweiterung (Ersetzen eines Benutzerverzeichnisses)

Ein Wort, das mit einem nicht in Anführungszeichen eingeschlossenen Tilde-Zeichen (~) beginnt, wird einer Tilde-Erweiterung unterzogen. Alle Zeichen bis zu einem Schrägstrich (/) oder dem Ende des Wortes werden als Benutzername behandelt und durch das Home-Verzeichnis des Benutzers ersetzt. Wenn der Benutzername fehlt (wie in ~/foobar), wird das Tilde-Zeichen durch den Wert der Variable HOME (das Home-Verzeichnis des aktuellen Benutzers) ersetzt.

Parametererweiterung

Das Format für die Parametererweiterung ist wie folgt:

${Ausdruck}

wobei der Ausdruck aus allen Zeichen bis zur übereinstimmenden „}-Klammer besteht. Alle „}-Klammern, die durch einen umgekehrten Schrägstrich oder innerhalb einer Zeichenkette in Anführungszeichen geschützt sind, und Zeichen in eingebetteten arithmetischen Erweiterungen, Befehlssubstitutionen und Variablenexpansionen werden nicht bei der Bestimmung der übereinstimmenden „}`-Klammer berücksichtigt.

Die einfachste Form für die Parametererweiterung ist:

${Parameter}

Der Wert des Parameters wird, falls vorhanden, ersetzt.

Der Parametername oder das Symbol kann in geschweifte Klammern eingeschlossen werden, was optional ist, außer für Positions-Parameter mit mehr als einer Ziffer oder wenn auf den Parameter ein Zeichen folgt, das als Teil des Namens interpretiert werden könnte. Wenn eine Parametererweiterung innerhalb von doppelten Anführungszeichen stattfindet:

      Die Pfadnamenerweiterung wird nicht auf die Ergebnisse der Erweiterung angewendet.

Die Feldaufteilung wird nicht auf die Ergebnisse der Expansion angewendet, mit Ausnahme von @.

Darüber hinaus kann eine Parametererweiterung mit einem der folgenden Formate modifiziert werden.

${parameter:-word} Verwenden von Standardwerten. Wenn der Parameter nicht gesetzt oder leer ist, wird die Expansion von "word" ersetzt; andernfalls wird der Wert des Parameters ersetzt.

${parameter:=word} Standardwerte zuweisen. Wenn der Parameter nicht gesetzt oder leer ist, wird die Expansion von "word" dem Parameter zugewiesen. In allen Fällen wird der endgültige Wert des Parameters ersetzt. Nur Variablen, nicht Positions- oder spezielle Parameter, können auf diese Weise zugewiesen werden.

${parameter:?[word]} Fehler anzeigen, wenn der Parameter leer oder nicht gesetzt ist. Wenn der Parameter nicht gesetzt oder leer ist, wird die Expansion von "word" (oder eine Meldung, die angibt, dass er nicht gesetzt ist, wenn "word" fehlt) in die Standardausgabe geschrieben und die Shell wird mit einem Fehlercode beendet. Andernfalls wird der Wert des Parameters ersetzt. Eine interaktive Shell muss nicht beendet werden.

${parameter:+word} Alternativen Wert verwenden. Wenn der Parameter nicht gesetzt oder leer ist, wird ein leerer Wert ersetzt; andernfalls wird die Expansion von "word" ersetzt.

Bei den zuvor gezeigten Parametererweiterungen führt die Verwendung des Doppelpunkts in dem Format zu einem Test für einen Parameter, der nicht gesetzt oder leer ist; das Weglassen des Doppelpunkts führt zu einem Test für einen Parameter, der nur nicht gesetzt ist.

${#parameter} Zeichenkettenlänge. Die Länge in Zeichen des Werts des Parameters.

Die folgenden vier Arten von Parametererweiterungen ermöglichen die Verarbeitung von Teilzeichenketten. In jedem Fall wird zur Auswertung der Muster die Syntax der Shell-Muster (siehe "Shell-Muster") und nicht die Syntax der regulären Ausdrücke verwendet. Wenn der Parameter * oder @ ist, ist das Ergebnis der Expansion nicht definiert. Das Einschließen der vollständigen Parametererweiterungszeichenkette in doppelte Anführungszeichen führt nicht dazu, dass die folgenden vier Arten von Musternzeichen "gequoted" werden, während das Setzen von Zeichen innerhalb der geschweiften Klammern diesen Effekt hat.

${parameter%word} Kleinste Suffixmuster entfernen. Das "word" wird erweitert, um ein Muster zu erzeugen. Die Parametererweiterung ergibt dann den Parameter, wobei der kleinste Teil des Suffix, der mit dem Muster übereinstimmt, gelöscht wird.

${parameter%%word} Größtes Suffixmuster entfernen. Das "word" wird erweitert, um ein Muster zu erzeugen. Die Parametererweiterung ergibt dann den Parameter, wobei der größte Teil des Suffix, der mit dem Muster übereinstimmt, gelöscht wird.

${parameter#word} Kleinstes Präfixmuster entfernen. Das "word" wird erweitert, um ein Muster zu erzeugen. Die Parametererweiterung ergibt dann den Parameter, wobei der kleinste Teil des Präfix, der mit dem Muster übereinstimmt, gelöscht wird.

${parameter##word} Größtes Präfixmuster entfernen. Das "word" wird erweitert, um ein Muster zu erzeugen. Die Parametererweiterung ergibt dann den Parameter, wobei der größte Teil des Präfix, der mit dem Muster übereinstimmt, gelöscht wird.

Befehlssubstitution

Die Befehlssubstitution ermöglicht es, die Ausgabe eines Befehls anstelle des Befehlsnamens selbst einzusetzen. Die Befehlssubstitution erfolgt, wenn der Befehl wie folgt eingeschlossen wird:


$(command)

oder („mit Backticks“-Version):

`command`

Die Shell erweitert die Befehlssubstitution, indem sie den Befehl in einer Subshell-Umgebung ausführt und die Befehlssubstitution durch die Standardausgabe des Befehls ersetzt, wobei Folgen von einem oder mehreren ⟨Zeilenumbrüchen⟩ am Ende der Substitution entfernt werden. (Eingebettete ⟨Zeilenumbrüche⟩ vor dem Ende der Ausgabe werden nicht entfernt; während der Feldaufteilung können sie jedoch in ⟨Leerzeichen⟩ übersetzt werden, abhängig vom Wert von IFS und der verwendeten Anführungszeichen.)

Arithmetische Erweiterung

Die arithmetische Erweiterung bietet einen Mechanismus zum Auswerten eines arithmetischen Ausdrucks und zum Ersetzen durch seinen Wert. Das Format für die arithmetische Erweiterung lautet wie folgt:

    $((expression))

Der Ausdruck wird so behandelt, als wäre er in doppelte Anführungszeichen gesetzt, außer dass ein doppeltes Anführungszeichen innerhalb des Ausdrucks nicht speziell behandelt wird. Die Shell erweitert alle Token im Ausdruck für die Parametererweiterung, die Befehlssubstitution und die Anführungszeichenentfernung.

Anschließend behandelt die Shell dies als einen arithmetischen Ausdruck und ersetzt ihn durch den Wert des Ausdrucks.

Leerzeichenaufteilung (Felderaufteilung)

Nach der Parametererweiterung, der Befehlssubstitution und der arithmetischen Erweiterung scannt die Shell die Ergebnisse von Erweiterungen und Substitutionen, die nicht in doppelten Anführungszeichen stattgefunden haben, auf die Felderaufteilung, und es können mehrere Felder entstehen.

Die Shell behandelt jedes Zeichen von IFS als Trennzeichen und verwendet die Trennzeichen, um die Ergebnisse der Parametererweiterung und der Befehlssubstitution in Felder aufzuteilen.

Pfadnamenerweiterung (Dateinamengenerierung)

Sofern das -f-Flag nicht gesetzt ist, wird die Dateinamengenerierung durchgeführt, nachdem die Wortaufteilung abgeschlossen ist. Jedes Wort wird als eine Reihe von Mustern betrachtet, die durch Schrägstriche getrennt sind. Der Erweiterungsprozess ersetzt das Wort durch die Namen aller vorhandenen Dateien, deren Namen gebildet werden können, indem jedes Muster durch eine Zeichenkette ersetzt wird, die dem angegebenen Muster entspricht. Dabei gibt es zwei Einschränkungen: erstens darf ein Muster keine Zeichenkette mit einem Schrägstrich enthalten, und zweitens darf ein Muster keine Zeichenkette enthalten, die mit einem Punkt beginnt, es sei denn, das erste Zeichen des Musters ist ein Punkt. Der nächste Abschnitt beschreibt die Muster, die sowohl für die Pfadnamenerweiterung als auch für den case-Befehl verwendet werden.

Shell-Muster

    Ein Muster besteht aus normalen Zeichen, die mit sich selbst übereinstimmen, und Meta-Zeichen. Die Meta-Zeichen sind „!“, „*“, „?“ und „[“. Diese Zeichen verlieren ihre spezielle Bedeutung, wenn sie
    in Anführungszeichen gesetzt sind. Wenn eine Befehls- oder Variablenersetzung durchgeführt wird und das Dollarzeichen oder die Backticks
    nicht in doppelten Anführungszeichen stehen, wird der Wert der Variablen oder die Ausgabe des Befehls auf diese Zeichen gescannt und sie werden in Meta-Zeichen umgewandelt.

Ein Stern („\*“) stimmt mit jeder Zeichenkette überein. Ein Fragezeichen stimmt mit jedem einzelnen Zeichen überein. Eine linke Klammer („[“) leitet eine Zeichenklasse ein. Das Ende der Zeichenklasse wird
durch eine rechte Klammer („]“) angezeigt; wenn die rechte Klammer fehlt, stimmt die linke Klammer mit einer linken Klammer überein, anstatt eine
    Zeichenklasse einzuleiten. Eine Zeichenklasse stimmt mit einem der Zeichen zwischen den eckigen Klammern überein. Ein
    Bereich von Zeichen kann mit einem Minuszeichen angegeben werden. Die Zeichenklasse kann komplementiert werden, indem ein Ausrufezeichen das erste Zeichen der Zeichenklasse ist.

Um ein „]“ in einer Zeichenklasse einzuschließen, machen Sie es zum ersten Zeichen, das aufgeführt ist (nach dem „!“, falls vorhanden). Um ein Minuszeichen einzuschließen, machen Sie es zum ersten oder letzten Zeichen in der Liste.

Integrierte Befehle

Dieser Abschnitt listet die integrierten Befehle auf, die integriert sind, weil sie eine Operation ausführen müssen, die nicht von einem separaten Prozess ausgeführt werden kann. Zusätzlich dazu gibt es mehrere andere Befehle, die aus Effizienzgründen integriert sein können (z. B. printf(1), echo(1), test(1) usw.).

:

true Ein Null-Befehl, der einen Exit-Wert von 0 (wahr) zurückgibt.

false Ein Null-Befehl, der einen Exit-Wert von 1 (falsch) zurückgibt.

. Datei

Die Befehle in der angegebenen Datei werden gelesen und von der Shell ausgeführt.

alias [Name[=String ...]]

Wenn Name=String angegeben wird, definiert die Shell den Alias-Namen mit dem Wert String. Wenn nur Name angegeben wird, wird der Wert des Alias-Namens ausgegeben. Ohne Argumente gibt der integrierte Befehl Alias die Namen und Werte aller definierten Aliase aus (siehe unalias).

bg [Job] ...

Setzt die angegebenen Jobs (oder den aktuellen Job, wenn keine Jobs angegeben sind) im Hintergrund fort.

command [-p] [-v] [-V] Befehl [Arg ...]

Führt den angegebenen Befehl aus, ignoriert aber Shell-Funktionen bei der Suche danach. (Dies ist nützlich, wenn Sie eine Shell-Funktion mit dem gleichen Namen wie einen integrierten Befehl haben.)

-p Sucht nach dem Befehl unter Verwendung eines PATH, der garantiert, dass alle Standard-Dienstprogramme gefunden werden.

-V Führt den Befehl nicht aus, sucht aber nach dem Befehl und gibt die Auflösung der Befehlssuche aus. Dies entspricht dem Befehl type.

-v Führt den Befehl nicht aus, sucht aber nach dem Befehl und gibt den absoluten Pfad der Dienstprogramme, den Namen für integrierte Befehle oder die Erweiterung von Aliasen aus.

cd|chdir cd|chdir [-LP] [Verzeichnis]

Wechselt zu dem angegebenen Verzeichnis (Standard HOME). Wenn ein Eintrag für CDPATH in der Umgebung des Befehls cd vorhanden ist oder die Shell-Variable CDPATH gesetzt ist und der Verzeichnisname nicht mit einem Schrägstrich beginnt, werden die in CDPATH aufgeführten Verzeichnisse nach dem angegebenen Verzeichnis durchsucht. Das Format von CDPATH ist das gleiche wie das von PATH. Wenn ein einzelner Bindestrich als Argument angegeben wird, wird dieser durch den Wert von OLDPWD ersetzt. Der Befehl cd gibt den Namen des Verzeichnisses aus, zu dem er tatsächlich gewechselt ist, wenn dies von dem Namen abweicht, den der Benutzer angegeben hat. Diese können unterschiedlich sein, entweder weil der CDPATH-Mechanismus verwendet wurde oder weil das Argument ein einzelner Bindestrich ist. Die Option -P bewirkt, dass die physische Verzeichnisstruktur verwendet wird, d. h., alle symbolischen Links werden zu ihren jeweiligen Werten aufgelöst. Die Option -L hebt die Wirkung aller vorherigen Optionen -P auf.


echo [-n] args...

Gibt die Argumente auf der Standardausgabe aus, getrennt durch Leerzeichen. Es sei denn, die Option -n ist vorhanden, wird nach den Argumenten eine neue Zeile ausgegeben.

Wenn während der Ausgabe eine der folgenden Zeichenfolgen gefunden wird, wird die Zeichenfolge nicht ausgegeben. Stattdessen wird die angegebene Aktion ausgeführt:

\b      Ein Backspace-Zeichen wird ausgegeben.

\c      Die nachfolgende Ausgabe wird unterdrückt. Dies wird normalerweise am Ende des letzten Arguments verwendet, um die abschließende neue Zeile zu unterdrücken, die echo sonst ausgeben würde.

\e      Gibt ein Escape-Zeichen (ESC) aus.

\f      Gibt ein Formularvorschubzeichen aus.

\n      Gibt ein Zeilenvorschubzeichen aus.

\r      Gibt ein Wagenrücklaufzeichen aus.

\t      Gibt ein (horizontal) Tabulatorzeichen aus.

\v      Gibt ein vertikales Tabulatorzeichen aus.

\0digits

Gibt das Zeichen aus, dessen Wert durch ein bis drei oktale Ziffern angegeben wird. Wenn keine Ziffern vorhanden sind, wird ein Nullzeichen ausgegeben.

\\      Gibt einen umgekehrten Schrägstrich aus.

Alle anderen Backslash-Sequenzen führen zu undefiniertem Verhalten.

eval string ...

Verkettet alle Argumente mit Leerzeichen. Anschließend wird das Kommando erneut geparst und ausgeführt.

exec [command arg ...]

Es sei denn, command wird weggelassen, wird der Shell-Prozess durch das angegebene Programm ersetzt (das ein echtes Programm sein muss, kein Shell-Builtin oder eine Funktion). Alle Umleitungen im exec-Kommando werden als permanent gekennzeichnet, sodass sie nicht aufgehoben werden, wenn das exec-Kommando beendet ist.

exit [exitstatus]

Beendet den Shell-Prozess. Wenn exitstatus angegeben ist, wird dieser als Exit-Status der Shell verwendet; andernfalls wird der Exit-Status des vorhergehenden Befehls verwendet.

export name ...

export -p

Die angegebenen Namen werden exportiert, sodass sie in der Umgebung nachfolgender Befehle angezeigt werden. Die einzige Möglichkeit, eine Variable nicht mehr zu exportieren, besteht darin, sie aufzuheben. Die Shell erlaubt, dass der Wert einer Variablen gleichzeitig mit dem Exportieren festgelegt wird, indem man schreibt

export name=value

Ohne Argumente listet der Befehl export die Namen aller exportierten Variablen auf. Mit der Option -p wird die Ausgabe so formatiert, dass sie für die nicht-interaktive Verwendung geeignet ist.

fc [-e editor] [first [last]]

fc -l [-nr] [first [last]]

fc -s [old=new] [first]

Das Builtin-Kommando fc listet oder bearbeitet und führt zuvor eingegebene Befehle in einer interaktiven Shell erneut aus.

-e editor

Verwendet den durch Editor angegebenen Editor, um die Befehle zu bearbeiten. Die Editor-Zeichenfolge ist ein Befehlsname, der über die PATH-Variable gesucht wird. Der Wert in der Variablen FCEDIT wird als Standardwert verwendet, wenn -e nicht angegeben ist. Wenn FCEDIT null oder nicht gesetzt ist, wird der Wert der Variablen EDITOR verwendet. Wenn EDITOR null oder nicht gesetzt ist, wird ed(1) als Editor verwendet.

-l (ell)

Listet die Befehle auf, anstatt sie in einem Editor zu öffnen. Die Befehle werden in der durch die Operanden first und last angegebenen Reihenfolge ausgegeben, wobei -r berücksichtigt wird, wobei jedem Befehl die Befehlsnummer vorangestellt wird.


-n     Unterdrückt die Anzeige von Befehlsnummern bei der Auflistung mit -l.

-r     Kehrt die Reihenfolge der aufgelisteten Befehle (mit -l) oder der bearbeiteten Befehle (weder mit -l noch mit -s) um.

-s     Führt den Befehl erneut aus, ohne einen Editor aufzurufen.

first

last   Wählt die anzuzeigenden oder zu bearbeitenden Befehle aus. Die Anzahl der abrufbaren vorherigen Befehle wird durch den Wert der Variablen HISTSIZE bestimmt. Der Wert von first oder last oder beides ist eine der folgenden Optionen:

[+]number
Eine positive Zahl, die eine Befehlsnummer darstellt; Befehlsnummern können mit der Option -l angezeigt werden.

-number
Eine negative Dezimalzahl, die den Befehl darstellt, der vor der angegebenen Anzahl von Befehlen ausgeführt wurde. Zum Beispiel steht -1 für den unmittelbar vorherigen Befehl.

string
Eine Zeichenkette, die den zuletzt eingegebenen Befehl angibt, der mit dieser Zeichenkette beginnt. Wenn der Operand old=new nicht zusammen mit -s angegeben wird, darf die Zeichenkettenform des ersten Operanden kein eingebettetes Gleichheitszeichen enthalten.

Die folgenden Umgebungsvariablen beeinflussen die Ausführung von fc:

FCEDIT    Name des zu verwendenden Editors.

HISTSIZE  Die Anzahl der abrufbaren vorherigen Befehle.

fg [job]

Verschiebt den angegebenen Job oder den aktuellen Job in den Vordergrund.

getopts optstring var [arg ...]

Der POSIX-Befehl getopts, nicht zu verwechseln mit dem von Bell Labs abgeleiteten Befehl getopt(1).

Das erste Argument sollte eine Reihe von Buchstaben sein, von denen jeder optional von einem Doppelpunkt gefolgt werden kann, um anzugeben, dass die Option ein Argument erfordert. Die angegebene Variable wird auf die analysierte Option gesetzt.

Der Befehl getopts setzt das ältere Dienstprogramm getopt(1) aufgrund seiner Handhabung von Argumenten, die Leerzeichen enthalten, außer Kraft.

Das integrierte Programm getopts kann verwendet werden, um Optionen und deren Argumente aus einer Liste von Parametern abzurufen. Bei der Aufruf setzt getopts den Wert der nächsten Option aus der Optionszeichenkette in die durch var angegebene Shell-Variable und deren Index in die Shell-Variable OPTIND. Wenn die Shell aufgerufen wird, wird OPTIND auf 1 initialisiert. Für jede Option, die ein Argument erfordert, setzt das integrierte Programm getopts dieses in die Shell-Variable OPTARG. Wenn eine Option nicht in der Optionszeichenkette zulässig ist, wird OPTARG gelöscht.

Standardmäßig werden die Variablen $1, ..., $n überprüft; wenn Argumente angegeben werden, werden diese stattdessen analysiert.

optstring ist eine Zeichenkette mit den erkannten Optionsbuchstaben (siehe getopt(3)). Wenn ein Buchstabe von einem Doppelpunkt gefolgt wird, wird erwartet, dass die Option ein Argument hat, das möglicherweise durch Leerzeichen von diesem getrennt ist. Wenn ein Optionszeichen nicht an der erwarteten Stelle gefunden wird, setzt getopts die Variable var auf „?“; getopts löscht dann OPTARG und schreibt die Ausgabe in die Standardfehlerausgabe. Durch die Angabe eines Doppelpunkts als erstes Zeichen von optstring werden alle Fehler ignoriert.

Nach der letzten Option gibt getopts einen Wert ungleich Null zurück und setzt var auf „?”.

Das folgende Codefragment zeigt, wie man die Argumente für einen Befehl verarbeiten könnte, der die Optionen [a] und [b] sowie die Option [c], die ein Argument erfordert, entgegennehmen kann.


while getopts abc: f
do
case $f in
a | b)  flag=$f;;
c)      carg=$OPTARG;;
\?)     echo $USAGE; exit 1;;
esac
done
shift $((OPTIND - 1))

Dieser Code akzeptiert jedes der folgenden als äquivalent:

cmd -acarg datei datei
cmd -a -c arg datei datei
cmd -carg -a datei datei
cmd -a -carg -- datei datei
hash [Befehl ...]
hash -r

Die Shell führt eine Hashtabelle, die sich die Speicherorte von Befehlen merkt. Ohne Argumente gibt der Befehl hash den Inhalt dieser Tabelle aus. Einträge, die seit dem letzten cd-Befehl nicht mehr verwendet wurden, sind mit einem Sternchen gekennzeichnet; es ist möglich, dass diese Einträge ungültig sind.

Mit Argumenten entfernt der Befehl hash die angegebenen Befehle aus der Hashtabelle (es sei denn, es handelt sich um Funktionen) und sucht sie dann. Die Option -r bewirkt, dass der Befehl hash alle Einträge in der Hashtabelle löscht, mit Ausnahme von Funktionen.

jobs [-lp] [Job ...]

Zeigt den Status aller oder nur der angegebenen Jobs an: Standardmäßig werden die Jobnummer, der aktuelle Status (+/-), der Jobstatus und der zugehörige Shell-Befehl angezeigt. ^ l gibt zusätzlich die PID des Gruppenleiters und nur die PID und die Shell-Befehle der anderen Mitglieder des Jobs aus. ^ p zeigt nur die PIDs der Leiter, jeweils eine pro Zeile, an.

kill [-s sigspec | -signum | -sigspec] [pid | job ...]

Entspricht kill(1), aber es kann auch eine Job-Spezifikation angegeben werden. Signale können entweder als nicht-groß-/kleinschreibungsempfindliche Namen ohne die Präfixe SIG oder als Dezimalzahlen angegeben werden; der Standardwert ist TERM.

kill -l [signum | exitstatus]

Listet die verfügbaren Signalnamen ohne das Präfix SIG auf. Wenn ein signum angegeben wird, wird nur die sigspec für dieses Signal angezeigt. Wenn ein exitstatus angegeben wird (> 128), wird nur die sigspec angezeigt, die ihn verursacht hat.

pwd [-LP]

Der integrierte Befehl pwd merkt sich das aktuelle Verzeichnis, anstatt es jedes Mal neu zu berechnen. Dies macht ihn schneller. Wenn das aktuelle Verzeichnis jedoch umbenannt wird, gibt die integrierte Version von pwd weiterhin den alten Namen des Verzeichnisses aus. Die Option -P bewirkt, dass der physische Wert des aktuellen Arbeitsverzeichnisses angezeigt wird, d. h. alle symbolischen Links werden in ihre jeweiligen Werte aufgelöst. Die Option -L hebt die Wirkung aller vorherigen -P-Optionen auf.

read [-p prompt] [-r] variable [...]

Wenn die Option -p angegeben wird und die Standardeingabe ein Terminal ist, wird die Eingabeaufforderung ausgegeben. Anschließend wird eine Zeile aus der Standardeingabe gelesen. Das abschließende Zeilenumbruchzeichen wird aus der Zeile entfernt, und die Zeile wird wie im Abschnitt über Wortaufteilung oben beschrieben aufgeteilt, und die Teile werden in der Reihenfolge den Variablen zugewiesen. Es muss mindestens eine Variable angegeben werden. Wenn es mehr Teile als Variablen gibt, werden die verbleibenden Teile (zusammen mit den in IFS enthaltenen Trennzeichen) der letzten Variablen zugewiesen. Wenn es mehr Variablen als Teile gibt, erhalten die verbleibenden Variablen den Nullwert. Der integrierte Befehl read gibt Erfolg zurück, es sei denn, beim Lesen der Eingabe tritt ein EOF auf, in diesem Fall wird ein Fehler zurückgegeben.


Standardmäßig wirkt das Backslash-Zeichen "\" als Escape-Zeichen, es sei denn, die Option -r ist angegeben, wodurch das folgende Zeichen wörtlich behandelt wird. Wenn auf ein Backslash eine neue Zeile folgt, werden das Backslash und die neue Zeile gelöscht.

readonly name ...

readonly -p

Die angegebenen Namen werden als schreibgeschützt markiert, so dass sie nicht mehr geändert oder gelöscht werden können. Die Shell erlaubt es, den Wert einer Variablen gleichzeitig mit der Markierung als schreibgeschützt festzulegen, indem man schreibt:

readonly name=value

Ohne Argumente listet der Befehl readonly die Namen aller schreibgeschützten Variablen auf. Mit der Option -p wird die Ausgabe so formatiert, dass sie für die nicht-interaktive Verwendung geeignet ist.

printf format [value]...

^ rintf formatiert und gibt seine Argumente gemäß format aus, einer Zeichenkette, die drei Arten von Objekten enthält: einfache Zeichen, die einfach in die Standardausgabe kopiert werden, Zeichen-Escape-Sequenzen, die konvertiert und in die Standardausgabe kopiert werden, und Formatbezeichner, von denen jeder die Ausgabe des nächsten Wertes bewirkt.

Jeder Wert wird als Zeichenkette behandelt, wenn der entsprechende Formatbezeichner entweder b, c oder s ist; andernfalls wird er als C-Konstante ausgewertet, mit den folgenden Ergänzungen: Ein führendes Plus- oder Minuszeichen ist erlaubt. Wenn das führende Zeichen ein einzelnes oder doppeltes Anführungszeichen ist, ist der Wert des nächsten Byte.

Die Formatzeichenkette wird so oft wiederverwendet, wie es nötig ist, bis alle Werte verbraucht sind. Alle zusätzlichen Formatbezeichner werden mit Null oder der Nullzeichenkette ausgewertet.

Zeichen-Escape-Sequenzen sind in Backslash-Notation gemäß ANSI X3.159-1989 („ANSI C89“) definiert. Die Zeichen und ihre Bedeutung sind wie folgt:

\a      Schreibt ein <Bell>-Zeichen.

\b      Schreibt ein <Backspace>-Zeichen.

\e      Schreibt ein <Escape>-Zeichen (ESC).

\f      Schreibt ein <Form-Feed>-Zeichen.

\n      Schreibt ein <New-Line>-Zeichen.

\r      Schreibt ein <Carriage Return>-Zeichen.

\t      Schreibt ein <Tab>-Zeichen.

\v      Schreibt ein <Vertical Tab>-Zeichen.

\\      Schreibt ein Backslash-Zeichen.

\num    Schreibt ein 8-Bit-Zeichen, dessen ASCII-Wert die 1-, 2- oder 3-stellige Oktalzahl `num` ist.

Jeder Formatbezeichner wird durch das Prozentzeichen (%') eingeleitet. Der Rest des Formatbezeichners enthält in der folgenden Reihenfolge:

Null oder mehr der folgenden Flags:

#       Ein `#`-Zeichen, das angibt, dass der Wert in einer „alternativen Form“ ausgegeben werden soll. Für die Formate b, c, d und s hat diese Option keine Auswirkung.

Für das Format o wird die Präzision der Zahl erhöht, um das erste Zeichen der Ausgabezellenkette auf Null zu setzen. Für das Format x (oder X) wird einer nicht-null-Ergebnis die Zeichenkette 0x (oder 0X) vorangestellt. Für die Formate e, E, f, g und G enthält das Ergebnis immer einen Dezimalpunkt, auch wenn keine Ziffern auf den Punkt folgen (normalerweise erscheint ein Dezimalpunkt nur in den Ergebnissen dieser Formate, wenn eine Ziffer auf den Dezimalpunkt folgt). Für die Formate g und G werden keine nachfolgenden Nullen aus dem Ergebnis entfernt, wie es sonst der Fall wäre.


- Ein Minuszeichen `-`, das eine linksbündige Ausgabe im angegebenen Feld angibt.

+ Ein `+`-Zeichen, das angibt, dass vor der Zahl immer ein Vorzeichen angezeigt werden soll, wenn signierte Formate verwendet werden.

‘ ’ Ein Leerzeichen, das angibt, dass vor einer positiven Zahl ein Leerzeichen eingefügt werden soll, wenn ein signiertes Format verwendet wird. Ein `+` überschreibt ein Leerzeichen, wenn beide verwendet werden.

0 Eine Null `0`, die angibt, dass stattdessen eine Nullauffüllung anstelle einer Leerzeichenauffüllung verwendet werden soll. Ein `-` überschreibt eine `0`, wenn beide verwendet werden.

Feldbreite: Eine optionale Ziffernfolge, die eine Feldbreite angibt; wenn die Ausgabezellenkette weniger Zeichen als die Feldbreite enthält, wird sie links (oder rechts, wenn der Linksbündigkeitsindikator angegeben wurde) mit Leerzeichen aufgefüllt, um die Feldbreite zu erreichen (beachten Sie, dass eine führende Null ein Flag ist, aber eine eingebettete Null Teil einer Feldbreite ist).

Präzision: Ein optionaler Punkt ., gefolgt von einer optionalen Ziffernfolge, die eine Präzision angibt, die die Anzahl der Ziffern nach dem Dezimalpunkt für die Formate e und f oder die maximale Anzahl von Bytes angibt, die aus einer Zeichenkette ausgegeben werden sollen (Formate b und s); wenn die Ziffernfolge fehlt, wird die Präzision als Null behandelt.

Format: Ein Zeichen, das den zu verwendenden Formattyp angibt (eines von diouxXfwEgGbcs).

Eine Feldbreite oder Präzision kann stattdessen ein \* sein. In diesem Fall liefert ein Argument die Feldbreite oder Präzision.

Die Formatierungszeichen und ihre Bedeutung sind:

diouXx Das Argument wird als signierte Dezimalzahl (`d` oder `i`), als vorzeichenlose Oktal-, Dezimal- oder vorzeichenlose Hexadezimalzahl (`X` oder `x`) ausgegeben.

f Das Argument wird im Stil `[-]ddd.ddd` ausgegeben, wobei die Anzahl der Ziffern nach dem Dezimalpunkt gleich der Präzisionsangabe für das Argument ist. Wenn die Präzision fehlt, werden 6 Ziffern ausgegeben; wenn die Präzision explizit 0 ist, werden keine Ziffern und kein Dezimalpunkt ausgegeben.

eE Das Argument wird im Stil `[-]d.ddde±dd` ausgegeben, wobei eine Ziffer vor dem Dezimalpunkt steht und die Anzahl der Ziffern danach gleich der Präzisionsangabe für das Argument ist; wenn die Präzision fehlt, werden 6 Ziffern ausgegeben. Ein Großbuchstaben-`E` wird für ein `E`-Format verwendet.

gG Das Argument wird entweder im Stil `f` oder im Stil `e` (oder `E`) ausgegeben, je nachdem, welcher die vollständige Präzision mit minimalem Platzbedarf liefert.

b Zeichen aus der Zeichenkettenargument werden mit erweiterten Escape-Sequenzen ausgegeben. Die folgenden zusätzlichen Escape-Sequenzen mit Backslash werden unterstützt:

\c Veranlasst, dass der Rest der Zeichen in der Zeichenkettenoperande, die sie enthält, alle verbleibenden Zeichenkettenoperanden und alle zusätzlichen Zeichen in der Formatanweisung ignoriert werden.

    \0num   Schreibe ein 8-Bit-Zeichen, dessen ASCII-Wert der 1-, 2- oder 3-stellige
    oktale Wert von `num` ist.

    c           Das erste Zeichen des Arguments wird ausgegeben.

    s           Zeichen aus dem Zeichenkettenargument werden ausgegeben, bis das Ende erreicht ist oder
    bis die durch die Präzisionsangabe angegebene Anzahl von Bytes erreicht ist;
    wenn die Präzision weggelassen wird, werden alle Zeichen in der Zeichenkette ausgegeben.

    %           Gib ein `%`-Zeichen aus; es wird kein Argument verwendet.

In keinem Fall führt ein nicht vorhandene oder zu kleine Feldbreite zur Abschneidung eines Feldes; die Auffüllung erfolgt nur, wenn die angegebene Feldbreite die tatsächliche Breite übersteigt.

    set [{ -optionen | +optionen | -- }] arg ...

Der Befehl set führt drei verschiedene Funktionen aus.

Ohne Argumente listet er die Werte aller Shell-Variablen auf.

Wenn Optionen angegeben werden, setzt er die angegebenen Optionsflags oder hebt sie auf, wie in dem Abschnitt „Argumentlistenverarbeitung“ beschrieben. Als Sonderfall: Wenn die Option -o oder +o ist und kein Argument angegeben wird, gibt die Shell die Einstellungen aller ihrer Optionen aus. Wenn die Option -o ist, werden die Einstellungen in einem für den Menschen lesbaren Format ausgegeben; wenn die Option +o ist, werden die Einstellungen in einem Format ausgegeben, das sich zum erneuten Eingeben in die Shell eignet, um die gleichen Optionseinstellungen zu erzielen.

Zusätzlich zu den in der „Argumentlistenverarbeitung“ aufgeführten Optionsnamen können die folgenden Optionen als Argumente für -o oder +o angegeben werden:

    pipefail  Leite den Exit-Status einer Pipeline aus den Exit-Status aller Befehle in der Pipeline ab, nicht nur aus dem letzten Befehl, wie im Abschnitt
    „Pipelines“ beschrieben.

Die dritte Verwendung des Befehls set besteht darin, die Werte der Positions-Parameter der Shell auf die angegebenen args zu setzen. Um die Positions-Parameter zu ändern, ohne Optionen zu ändern, verwende -- als erstes Argument für set. Wenn keine args vorhanden sind, löscht der Befehl set alle Positions-Parameter (entspricht der Ausführung von shift $#).

    shift [n]

Verschiebe die Positions-Parameter um n Stellen. Durch shift wird der Wert von $1 auf den Wert von $2 gesetzt, der Wert von $2 auf den Wert von $3 und so weiter, wodurch der Wert von $# um eins verringert wird. Wenn n größer ist als die Anzahl der Positions-Parameter, gibt shift eine Fehlermeldung aus und beendet das Programm mit dem Rückgabestatus 2.

    test ausdruck

    [ ausdruck ]

Das Dienstprogramm test wertet den Ausdruck aus und gibt, wenn er als true ausgewertet wird, einen Wert von 0 (wahr) zurück; andernfalls wird 1 (falsch) zurückgegeben. Wenn kein Ausdruck vorhanden ist, gibt test ebenfalls 1 (falsch) zurück.

Alle Operatoren und Flags sind separate Argumente für das Dienstprogramm test.

Die folgenden Primärausdrücke werden verwendet, um den Ausdruck zu erstellen:

    -b datei       Gibt `true` zurück, wenn die Datei vorhanden ist und eine Block-Gerätedatei ist.

    -c datei       Gibt `true` zurück, wenn die Datei vorhanden ist und eine Zeichen-Gerätedatei ist.

    -d datei       Gibt `true` zurück, wenn die Datei vorhanden ist und ein Verzeichnis ist.

    -e datei       Gibt `true` zurück, wenn die Datei vorhanden ist (unabhängig vom Typ).

    -f datei       Gibt `true` zurück, wenn die Datei vorhanden ist und eine reguläre Datei ist.

-g datei    Wahr, wenn die Datei existiert und das Set-Group-ID-Flag gesetzt ist.

-h datei    Wahr, wenn die Datei existiert und ein symbolischer Link ist.

-k datei    Wahr, wenn die Datei existiert und das Sticky-Bit gesetzt ist.

-n string    Wahr, wenn die Länge der Zeichenkette ungleich Null ist.

-p datei    Wahr, wenn die Datei eine benannte Pipe (FIFO) ist.

-r datei    Wahr, wenn die Datei existiert und lesbar ist.

-s datei    Wahr, wenn die Datei existiert und eine Größe größer als Null hat.

-t datei_deskriptor

Wahr, wenn die Datei, deren Dateideskriptor-Nummer datei_deskriptor ist, geöffnet ist und einem Terminal zugeordnet ist.

-u datei    Wahr, wenn die Datei existiert und das Set-User-ID-Flag gesetzt ist.

-w datei    Wahr, wenn die Datei existiert und beschreibbar ist. Wahr bedeutet nur, dass das
Schreib-Flag aktiviert ist. Die Datei ist nicht beschreibbar auf einem schreibgeschützten Dateisystem, selbst wenn
dieser Test wahr ergibt.

-x datei    Wahr, wenn die Datei existiert und ausführbar ist. Wahr bedeutet nur, dass das Ausführungs-
Flag aktiviert ist. Wenn die Datei ein Verzeichnis ist, bedeutet wahr, dass die Datei durchsucht werden kann.

-z string    Wahr, wenn die Länge der Zeichenkette Null ist.

-L datei    Wahr, wenn die Datei existiert und ein symbolischer Link ist. Dieser Operator wird zur
Kompatibilität mit früheren Versionen dieses Programms beibehalten. Verlassen Sie sich nicht auf seine
Existenz; verwenden Sie stattdessen -h.

-O datei    Wahr, wenn die Datei existiert und ihr Besitzer mit der effektiven Benutzer-ID dieses
Prozesses übereinstimmt.

-G datei    Wahr, wenn die Datei existiert und ihre Gruppe mit der effektiven Gruppen-ID dieses
Prozesses übereinstimmt.

-S datei    Wahr, wenn die Datei existiert und ein Socket ist.

datei1 -nt datei2

Wahr, wenn datei1 und datei2 existieren und datei1 neuer ist als datei2, oder wenn datei1 existiert, aber datei2 nicht.

datei1 -ot datei2

Wahr, wenn datei1 und datei2 existieren und datei1 älter ist als datei2, oder wenn datei2 existiert, aber datei1 nicht.

datei1 -ef datei2

Wahr, wenn datei1 und datei2 existieren und auf dieselbe Datei verweisen.

zeichenkette    Wahr, wenn die Zeichenkette nicht die Null-Zeichenkette ist.

s1 = s2    Wahr, wenn die Zeichenketten s1 und s2 identisch sind.

s1 != s2    Wahr, wenn die Zeichenketten s1 und s2 nicht identisch sind.

s1 < s2    Wahr, wenn die Zeichenkette s1 vor s2 kommt, basierend auf dem ASCII-Wert ihrer Zeichen.

s1 > s2    Wahr, wenn die Zeichenkette s1 nach s2 kommt, basierend auf dem ASCII-Wert ihrer Zeichen.

n1 -eq n2    Wahr, wenn die Ganzzahlen n1 und n2 algebraisch gleich sind.

n1 -ne n2    Wahr, wenn die Ganzzahlen n1 und n2 nicht algebraisch gleich sind.

n1 -gt n2    Wahr, wenn die Ganzzahl n1 algebraisch größer als die Ganzzahl n2 ist.

n1 -ge n2    Wahr, wenn die Ganzzahl n1 algebraisch größer oder gleich der Ganzzahl n2 ist.

n1 -lt n2    Wahr, wenn die Ganzzahl n1 algebraisch kleiner als die Ganzzahl n2 ist.

n1 -le n2    Wahr, wenn die Ganzzahl n1 algebraisch kleiner oder gleich der Ganzzahl n2 ist.

Diese Primärbefehle können mit den folgenden Operatoren kombiniert werden:

! ausdruck    Wahr, wenn der Ausdruck falsch ist.

ausdruck1 -a ausdruck2

Wahr, wenn sowohl ausdruck1 als auch ausdruck2 wahr sind.

ausdruck1 -o ausdruck2

Wahr, wenn entweder ausdruck1 oder ausdruck2 wahr sind.


(Ausdruck) True, wenn der Ausdruck wahr ist.

Der Operator -a hat eine höhere Präzedenz als der Operator -o.

times Gibt die akkumulierten Benutzer- und Systemzeiten für die Shell und für von der Shell ausgeführte Prozesse aus. Der Rückgabestatus ist 0.

trap [aktion signal ...]
Veranlasst die Shell, die angegebene Aktion auszuführen, wenn eines der angegebenen Signale empfangen wird. Die Signale werden entweder durch ihre Signalnummer oder durch den Namen des Signals angegeben. Wenn signal 0 oder EXIT ist, wird die Aktion ausgeführt, wenn die Shell beendet wird. Die Aktion kann auch leer sein (''), wodurch die angegebenen Signale ignoriert werden. Wenn die Aktion weggelassen oder auf '-' gesetzt ist, werden die angegebenen Signale auf ihre Standardaktion zurückgesetzt. Wenn die Shell eine Subshell startet, setzt sie die erfassten (aber nicht ignorierten) Signale auf ihre Standardaktion zurück. Der Befehl trap hat keine Auswirkungen auf Signale, die beim Start der Shell ignoriert wurden. Der Befehl trap ohne Argumente schreibt eine Liste der Signale und ihrer zugehörigen Aktion in die Standardausgabe in einem Format, das als Eingabe für die Shell geeignet ist, um die gleichen Trapping-Ergebnisse zu erzielen.

Beispiele:

trap

Listet die erfassten Signale und ihre entsprechenden Aktionen auf

trap '' INT QUIT tstp 30

Ignoriert die Signale INT, QUIT, TSTP, USR1

trap date INT

Gibt das Datum aus, wenn das Signal INT empfangen wird

type [name ...]
Interpretiert jeden Namen als Befehl und gibt die Auflösung der Befehlssuche aus. Mögliche Auflösungen sind: Shell-Schlüsselwort, Alias, Shell-interner Befehl, Befehl, verfolgter Alias und nicht gefunden. Für Aliase wird die Alias-Erweiterung ausgegeben; für Befehle und verfolgte Aliase wird der vollständige Pfad des Befehls ausgegeben.

ulimit [-H | -S] [-a | -tfdscmlpnvwr [wert]]
Erfragt oder setzt die Hard- oder Soft-Limits für Prozesse oder setzt neue Limits. Die Wahl zwischen einem Hard-Limit (das von keinem Prozess verletzt werden darf und das nach einer Absenkung nicht mehr erhöht werden kann) und einem Soft-Limit (das Prozesse lediglich signalisiert, aber nicht unbedingt beendet, und das erhöht werden kann) wird mit diesen Flags getroffen:

-H setzt oder erfragt Hard-Limits

-S setzt oder erfragt Soft-Limits. Wenn weder -H noch -S angegeben ist, wird das Soft-Limit angezeigt oder beide Limits gesetzt. Wenn beide angegeben sind, hat das zuletzt angegebene Vorrang.

Das abzufragende oder einzustellende Limit wird dann durch die Angabe eines der folgenden Flags ausgewählt:

-a zeigt alle aktuellen Limits an

-t zeigt oder setzt das Limit für die CPU-Zeit (in Sekunden)

-f zeigt oder setzt das Limit für die Größe der größten Datei, die erstellt werden kann (in 512-Byte-Blöcken)

-d zeigt oder setzt das Limit für die Größe des Datensegments eines Prozesses (in Kilobyte)

-s zeigt oder setzt das Limit für die Größe des Stapelspeichers eines Prozesses (in Kilobyte)

-c zeigt oder setzt das Limit für die Größe des größten Core-Dump, der erzeugt werden kann (in 512-Byte-Blöcken)

-m zeigt oder setzt das Limit für den gesamten physischen Speicher, der von einem Prozess verwendet werden kann (in Kilobyte)

-l zeigt oder setzt das Limit dafür, wie viel Speicher ein Prozess mit mlock(2) sperren kann (in Kilobyte)

-p      zeigt oder setzt die Grenze für die Anzahl der Prozesse, die dieser Benutzer gleichzeitig ausführen darf.

-n      zeigt oder setzt die Grenze für die Anzahl der Dateien, die ein Prozess gleichzeitig öffnen darf.

-v      zeigt oder setzt die Grenze für den gesamten virtuellen Speicher, der von einem Prozess verwendet werden darf (in Kilobyte).

-w      zeigt oder setzt die Grenze für die Gesamtzahl der von einem Prozess gehaltenen Sperren.

-r      zeigt oder setzt die Grenze für die Echtzeit-Scheduling-Priorität eines Prozesses.

Wenn keine dieser Optionen angegeben ist, wird die Grenze für die Dateigröße angezeigt oder gesetzt. Wenn ein Wert angegeben wird, wird die Grenze auf diese Zahl gesetzt; andernfalls wird die aktuelle Grenze angezeigt.

Die Grenzen eines beliebigen Prozesses können mit dem Dienstprogramm sysctl(8) angezeigt oder gesetzt werden.

umask [Maske]

Setzt den Wert von umask (siehe umask(2)) auf den angegebenen oktalen Wert. Wenn das Argument weggelassen wird, wird der umask-Wert ausgegeben.

unalias [-a] [Name]

Wenn ein Name angegeben wird, entfernt die Shell diesen Alias. Wenn -a angegeben wird, werden alle Aliase entfernt.

unset [-fv] Name ...

Die angegebenen Variablen und Funktionen werden aufgehoben und nicht mehr exportiert. Wenn -f oder -v angegeben wird, wird die entsprechende Funktion bzw. Variable aufgehoben. Wenn ein bestimmter Name sowohl einer Variablen als auch einer Funktion entspricht und keine Optionen angegeben sind, wird nur die Variable aufgehoben.

wait [Job]

Wartet, bis der angegebene Job abgeschlossen ist, und gibt den Exit-Status des letzten Prozesses in dem Job zurück. Wenn das Argument weggelassen wird, wird gewartet, bis alle Jobs abgeschlossen sind, und ein Exit-Status von Null zurückgegeben.

Befehlszeilenbearbeitung

Wenn dash interaktiv von einem Terminal aus verwendet wird, können der aktuelle Befehl und der Befehlsverlauf (siehe fc in „Builtins“) mithilfe der Vi-Modus-Befehlszeilenbearbeitung bearbeitet werden. Dieser Modus verwendet Befehle, die den in der Vi-Manpage beschriebenen ähneln. Der Befehl „set -o vi“ aktiviert die Vi-Modus-Bearbeitung und versetzt sh in den Vi-Einfügemodus. Wenn der Vi-Modus aktiviert ist, kann zwischen dem Einfügemodus und dem Befehlsmodus umgeschaltet werden. Es ähnelt Vi: Durch Eingabe von ⟨ESC⟩ wird in den Vi-Befehlsmodus gewechselt. Durch Drücken von ⟨Return⟩ im Befehlsmodus wird die Zeile an die Shell übergeben.

EXIT-STATUS

Fehler, die von der Shell erkannt werden, z. B. ein Syntaxfehler, führen dazu, dass die Shell mit einem Nicht-Null-Exit-Status beendet wird. Wenn die Shell keine interaktive Shell ist, wird die Ausführung der Shell-Datei abgebrochen. Andernfalls gibt die Shell den Exit-Status des zuletzt ausgeführten Befehls zurück, oder wenn das integrierte Programm „exit“ mit einem numerischen Argument verwendet wird, gibt es dieses Argument zurück.

UMGEBUNG

HOME        Wird automatisch von login(1) aus dem Anmeldeverzeichnis des Benutzers in der Passwortdatei (passwd(4)) gesetzt. Diese Umgebungsvariable dient auch als Standardargument für das integrierte Programm „cd“.

PATH        Der Standardsuchpfad für ausführbare Dateien. Siehe den obigen Abschnitt „Pfadsuche“.

CDPATH      Der Suchpfad, der mit dem integrierten Programm „cd“ verwendet wird.

MAIL Der Name einer Mail-Datei, die auf das Eintreffen neuer Mails überprüft wird. Wird durch MAILPATH überschrieben.

MAILCHECK Die Häufigkeit in Sekunden, mit der die Shell auf das Eintreffen von Mails in den durch MAILPATH oder die MAIL-Datei angegebenen Dateien überprüft. Wenn auf 0 gesetzt, erfolgt die Überprüfung bei jeder Eingabeaufforderung.

MAILPATH Eine durch einen Doppelpunkt „:“ getrennte Liste von Dateinamen, die die Shell auf eingehende Mails überprüfen soll. Diese Umgebungsvariable überschreibt die MAIL-Einstellung. Es können maximal 10 Postfächer gleichzeitig überwacht werden.

PS1 Die primäre Prompt-Zeichenfolge, die standardmäßig „$ “ ist, es sei denn, Sie sind der Superuser, in diesem Fall ist sie standardmäßig „# “.

PS2 Die sekundäre Prompt-Zeichenfolge, die standardmäßig „> “ ist.

PS4 Ausgabe vor jeder Zeile, wenn die Ausführungsverfolgung (set -x) aktiviert ist, standardmäßig „+ “.

IFS Eingabe-Feldtrennzeichen. Normalerweise ist dies auf ⟨Leerzeichen⟩, ⟨Tabulator⟩ und ⟨Zeilenumbruch⟩ gesetzt. Weitere Details finden Sie im Abschnitt „Leerzeichenaufteilung“.

TERM Die Standard-Terminal-Einstellung für die Shell. Diese wird von den Kindprozessen der Shell übernommen und in den Verlaufbearbeitungsmodi verwendet.

HISTSIZE Die Anzahl der Zeilen im Verlaufspuffer der Shell.

PWD Der logische Wert des aktuellen Arbeitsverzeichnisses. Dies wird durch den Befehl cd festgelegt.

OLDPWD Der vorherige logische Wert des aktuellen Arbeitsverzeichnisses. Dies wird durch den Befehl cd festgelegt.

PPID Die Prozess-ID des übergeordneten Prozesses der Shell.

DATEIEN

$HOME/.profile

/etc/profile

SIEHE AUCH

csh(1), echo(1), getopt(1), ksh(1), login(1), printf(1), test(1), getopt(3), passwd(5), environ(7), sysctl(8)

HISTORIE

dash ist eine POSIX-konforme Implementierung von /bin/sh, die so klein wie möglich sein soll. Dash ist ein direkter Nachkomme der NetBSD-Version von ash (the Almquist SHell), die Anfang 1997 auf Linux portiert wurde. Sie wurde 2002 in dash umbenannt.

FEHLER

Setuid-Shell-Skripte sollten um jeden Preis vermieden werden, da sie ein erhebliches Sicherheitsrisiko darstellen.

PS1, PS2 und PS4 sollten vor der Anzeige einer Parametererweiterung unterzogen werden.