Skip to main content

Ash - Linux-Befehl

Linux Commands for Beginners (Old Version): 09 - The cat Command (Juni 2026)

Linux Commands for Beginners (Old Version): 09 - The cat Command (Juni 2026)
Anonim

NAME

sh - Befehlsinterpreter (Shell)

ZUSAMMENFASSUNG

Sch -/ + aCefnuvxIimqsVEbc -O langer Name -Wörter Ziel …

BESCHREIBUNG

Sh ist der Standardbefehlsinterpreter für das System. Die aktuelle Version vonSch ist im Prozess der Anpassung an diePOSIX 1003.2 und 1003.2a Spezifikationen für die Schale. Diese Version hat viele Funktionen, die sie in mancher Hinsicht der Korn-Shell ähneln, aber es ist kein Korn-Shell-Klon (siehe ksh (1)). Nur Funktionen, die mit gekennzeichnet sindPOSIX plus ein paar Berkeley-Erweiterungen werden in diese Shell integriert. Wir erwartenPOSIX Konformität bis zum Zeitpunkt 4.4 BSD freigegeben. Diese Manpage ist nicht als Tutorial oder als vollständige Spezifikation der Shell gedacht.

Überblick

Die Shell ist ein Befehl, der Zeilen aus einer Datei oder vom Terminal liest, interpretiert und im Allgemeinen andere Befehle ausführt. Es ist das Programm, das ausgeführt wird, wenn sich ein Benutzer beim System anmeldet (obwohl ein Benutzer mit dem Befehl chsh (1) eine andere Shell auswählen kann). Die Shell implementiert eine Sprache, die über Flusssteuerungskonstrukte verfügt, eine Makrofunktion, die neben der Datenspeicherung eine Vielzahl von Funktionen sowie integrierte Funktionen zur Protokollierung und Bearbeitung von Zeilen bietet. Es enthält viele Funktionen zur Unterstützung der interaktiven Verwendung und hat den Vorteil, dass die interpretative Sprache sowohl für die interaktive als auch für die nicht interaktive Verwendung (Shell-Skripts) gilt. Das heißt, Befehle können direkt in die laufende Shell eingegeben oder in eine Datei eingefügt werden, und die Datei kann direkt von der Shell ausgeführt werden.

Aufruf

Sind keine Argumente vorhanden und ist der Standardeingang der Shell mit einem Terminal verbunden (oderichFlag gesetzt) ​​und die -c Option nicht vorhanden ist, wird die Shell als interaktive Shell betrachtet. Eine interaktive Shell fordert im Allgemeinen vor jedem Befehl auf und behandelt Programmier- und Befehlsfehler unterschiedlich (wie unten beschrieben). Beim ersten Start prüft die Shell das Argument 0, und wenn es mit einem Bindestrich "-" beginnt, wird die Shell auch als Login-Shell betrachtet. Dies geschieht normalerweise automatisch vom System, wenn sich der Benutzer zum ersten Mal anmeldet. Eine Login-Shell liest zuerst Befehle aus den Dateien / etc / profile und .profile, falls vorhanden. Wenn die UmgebungsvariableENV Wird bei der Eingabe einer Shell festgelegt, oder im .profile einer Login-Shell, liest die Shell als nächstes Befehle aus der in genannten DateiENVDaher sollte ein Benutzer Befehle, die nur zur Anmeldezeit ausgeführt werden sollen, in die .profile-Datei einfügen, und Befehle, die für jede Shell in der ausgeführt werdenENV Datei. Einstellen derENV Wenn Sie eine Variable in eine Datei einfügen, fügen Sie die folgende Zeile in Ihr .profile Ihres Home-Verzeichnisses ein

ENV = $ HOME / .shinit; ENV exportieren

Ersetzen von `` .shinit '' jeden beliebigen Dateinamen. Seit derENV Die Datei wird bei jedem Aufruf der Shell gelesen, einschließlich Shellskripts und nicht interaktiven Shells. Das folgende Paradigma ist hilfreich, um Befehle in der Shell einzuschränkenENV Datei für interaktive Aufrufe. Platzieren Sie Befehle innerhalb von `` case '' und `` esac '' (diese Befehle werden später beschrieben):

case $ - in * i *)

# Befehle nur für die interaktive Verwendung

esac

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

Argumentlistenverarbeitung

Alle Optionen für einen Buchstaben haben einen entsprechenden Namen, der als Argument für die - verwendet werden kann.O Möglichkeit. Der Satz -O Der Name steht in der Beschreibung unten neben der Option für einen Buchstaben. Durch die Angabe eines Striches "-" wird die Option aktiviert, während ein Pluszeichen "+" deaktiviert wird. Die folgenden Optionen können über die Befehlszeile oder mit dem integrierten Set (1) (später beschrieben) festgelegt werden.

-ein allexport

Exportieren Sie alle zugewiesenen Variablen. (UNIMPLEMENTIERT für 4.4alpha)

-c

Liest Befehle von der Kommandozeile aus. Es werden keine Befehle von der Standardeingabe gelesen.

-C noclobber

Überschreiben Sie vorhandene Dateien nicht mit ``> '' (UNIMPLEMENTED für 4.4alpha).

-e errexit

Wenn dies nicht interaktiv ist, beenden Sie es sofort, wenn ein nicht getesteter Befehl fehlschlägt. Der Exit-Status eines Befehls gilt als explizit getestet, wenn der Befehl zur Steuerung eines Befehls verwendet wirdob elifwhile oderbis um oder wenn es sich bei dem Befehl um den linken Operanden eines '&&' 'oder' ||| '' Operators handelt.

-f Noglob

Deaktivieren Sie die Erweiterung des Pfadnamens.

-n noexec

Wenn nicht interaktiv, lesen Sie die Befehle, führen Sie sie jedoch nicht aus. Dies ist nützlich, um die Syntax von Shell-Skripts zu überprüfen.

-u Substantiv

Schreiben Sie eine Nachricht in Standardfehler, wenn Sie versuchen, eine Variable zu erweitern, die nicht festgelegt ist. Wenn die Shell nicht interaktiv ist, beenden Sie sie sofort. (UNIMPLEMENTIERT für 4.4alpha)

-v verbose

Die Shell schreibt ihre Eingabe beim Lesen in den Standardfehler. Nützlich zum Debuggen.

-x xtrace

Schreiben Sie jeden Befehl in den Standardfehler (vor dem Ausführen ein "+"). Nützlich für das Debuggen.

-q ruhiges Profil

Wenn die -v oder -x Es wurden Optionen festgelegt, die beim Lesen von Initialisierungsdateien nicht angewendet werden sollen. Diese sind / etc / profile .profile und die von der Datei angegebene DateiENV Umgebungsvariable.

-ICH ignorieren

Ignorieren Sie EOFs von der Eingabe, wenn Sie interaktiv sind.

-ich interaktiv

Erzwingen Sie ein interaktives Verhalten der Shell.

-m Monitor

Aktivieren Sie die Jobsteuerung (wird bei interaktiver Einstellung automatisch eingestellt).

-s stdin

Liest Befehle aus der Standardeingabe (wird automatisch gesetzt, wenn keine Dateiargumente vorhanden sind). Diese Option hat keine Auswirkung, wenn sie festgelegt wurde, nachdem die Shell bereits gestartet wurde (d. H. Mit set (1)).

-V vi

Aktivieren Sie den integrierten vi (1) -Befehlszeileneditor (deaktiviert -E wenn es eingestellt wurde).

-E Emacs

Aktivieren Sie den integrierten Emacs (1) -Befehlszeileneditor (deaktiviert -V wenn es eingestellt wurde).

-b benachrichtigen

Aktivieren Sie die asynchrone Benachrichtigung über den Abschluss eines Hintergrundjobs. (UNIMPLEMENTIERT für 4.4alpha)

Lexikalische Struktur

Die Shell liest Eingaben in Form von Zeilen aus einer Datei und teilt sie in Leerzeichen (Leerzeichen und Tabulatoren) und in bestimmte Zeichenfolgen auf, die speziell für die Shell "Operatoren" genannt werden. Es gibt zwei Arten von Operatoren: Kontrolloperatoren und Umleitungsoperatoren (deren Bedeutung wird später erläutert). Im Folgenden finden Sie eine Liste von Operatoren:

"Steueroperatoren:"

& && ( ) ; ;; | ||

"Umleitungsoperator:"

< > >| << >> <& >& <<- <>

Zitieren

Anführungszeichen werden verwendet, um die spezielle Bedeutung bestimmter Zeichen oder Wörter in der Shell zu entfernen, z. B. Operatoren, Leerzeichen oder Schlüsselwörter. Es gibt drei Arten von Anführungszeichen: Übereinstimmende einfache Anführungszeichen, übereinstimmende doppelte Anführungszeichen und umgekehrter Schrägstrich.

Backslash

Ein Backslash behält die wörtliche Bedeutung des folgenden Zeichens bei, mit Ausnahme von Aq newline. Ein Backslash vor einem Aq-Zeilenumbruch wird als Zeilenfortsetzung behandelt.

Einzelzitate

Wenn Sie Zeichen in einfache Anführungszeichen setzen, wird die wörtliche Bedeutung aller Zeichen beibehalten (mit Ausnahme von einfachen Anführungszeichen, wodurch es unmöglich ist, einfache Anführungszeichen in einen String mit einfachen Anführungszeichen zu setzen).

Anführungszeichen

Das Einschließen von Zeichen in Anführungszeichen behält die wörtliche Bedeutung aller Zeichen außer Dollarzeichen ($) backquote (`) und Backslash (). Der umgekehrte Schrägstrich in Anführungszeichen ist historisch ungewöhnlich und dient nur zur Angabe der folgenden Zeichen:

$ `

Ansonsten 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 Steuerelementoperator erkannt werden. Die folgenden Wörter sind reserviert:

! Taelif Ta fi Ta während Ta Fall

sonst Tafür Ta dann Ta {Ta}

do Tagetan Ta bis Ta wenn Ta esac

Ihre Bedeutung wird später besprochen.

Aliase

Ein Alias ​​ist ein Name und ein entsprechender Wert, der mit dem Befehl alias (1) builtin festgelegt wird. Wann immer ein reserviertes Wort vorkommt (siehe oben), und nach der Prüfung auf reservierte Wörter, prüft die Shell das Wort, um zu sehen, ob es mit einem Alias ​​übereinstimmt. Wenn dies der Fall ist, wird es im Eingabestrom durch seinen Wert ersetzt. Wenn zum Beispiel ein Alias ​​namens `` lf '' mit dem Wert `` ls -F '' vorhanden ist, gilt folgende Eingabe:

lf foobar

würde werden

ls-F foobar

Aliase bieten naiven Benutzern eine bequeme Möglichkeit, Kurzbefehle für Befehle zu erstellen, ohne dass sie lernen müssen, wie sie Funktionen mit Argumenten erstellen. Sie können auch verwendet werden, um lexikalisch undeutlichen Code zu erstellen. Von dieser Verwendung wird abgeraten.

Befehle

Die Shell interpretiert die gelesenen Wörter anhand einer Sprache, deren Spezifikation außerhalb des Umfangs dieser Manpage liegt (siehe BNF in derPOSIX 1003.2 Dokument). Im Wesentlichen wird jedoch eine Zeile gelesen, und wenn das erste Wort der Zeile (oder nach einem Steueroperator) kein reserviertes Wort ist, hat die Shell einen einfachen Befehl erkannt. Andernfalls wurde möglicherweise ein komplexer Befehl oder ein anderes spezielles Konstrukt erkannt.

Einfache Befehle

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

  1. Leitwörter der Form "name = value" werden entfernt und der Umgebung des einfachen Befehls zugewiesen. Umleitungsoperatoren und ihre Argumente (wie unten beschrieben) werden entfernt und zur Verarbeitung gespeichert.

  2. Die restlichen Wörter werden erweitert, wie im Abschnitt "Erweiterungen" beschrieben. Das erste Wort wird als Befehlsname betrachtet und der Befehl wird gesucht. Die verbleibenden Wörter werden als Argumente des Befehls betrachtet. Wenn sich kein Befehlsname ergibt, wirken sich die in Element 1 erkannten Variablenzuweisungen "name = value" auf die aktuelle Shell aus.

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

Weiterleitungen

Umleitungen werden verwendet, um zu ändern, wo ein Befehl seine Eingabe liest oder seine Ausgabe sendet. Im Allgemeinen wird bei Umleitungen eine vorhandene Referenz zu einer Datei geöffnet, geschlossen oder dupliziert. Das für die Umleitung verwendete Gesamtformat lautet:

n Redir-Op-Datei

woher Redir-Op ist einer der zuvor genannten Umleitungsoperatoren. Nachfolgend finden Sie eine Liste der möglichen Weiterleitungen. Das Bq n ist eine optionale Zahl wie in '3' (nicht 'Bq 3'), die sich auf einen Dateideskriptor bezieht.

n> Datei

Leiten Sie die Standardausgabe (oder n) in eine Datei um.

n> | Datei

Gleich, aber überschreiben Sie die -C Möglichkeit.

n >> Datei

Standardausgabe (oder n) an Datei anhängen.

n <Datei

Umleitung der Standardeingabe (oder n) von der Datei.

n1 <& n2

Doppelte Standardeingabe (oder n1) aus dem Dateideskriptor n2.

n <& -

Schließen Sie die Standardeingabe (oder n).

n1> & n2

Doppelte Standardausgabe (oder n1) von n2.

n> & -

Schließen Sie die Standardausgabe (oder n).

n <> Datei

Datei zum Lesen und Schreiben an der Standardeingabe (oder n) öffnen.

Die folgende Umleitung wird häufig als "Hier-Dokument" bezeichnet.

n << Trennzeichen

hier-doc-text …

Trennzeichen

Der gesamte Text in aufeinanderfolgenden Zeilen bis zum Trennzeichen wird gespeichert und dem Befehl bei Standardeingabe oder dem Dateideskriptor n (falls angegeben) zur Verfügung gestellt.Wenn der in der ersten Zeile angegebene Begrenzer in Anführungszeichen steht, wird der Here-Doc-Text wörtlich behandelt. Andernfalls wird der Text Parametererweiterung, Befehlssubstitution und Arithmetikerweiterung unterzogen (wie im Abschnitt "Erweiterungen" beschrieben). Wenn der Operator "<<" anstelle von "<<" ist, werden die führenden Registerkarten im Here-Doc-Text entfernt.

Suche und Ausführung

Es gibt drei Arten von Befehlen: Shell-Funktionen, integrierte Befehle und normale Programme - und der Befehl wird (nach Name) in dieser Reihenfolge gesucht. Sie sind jeweils unterschiedlich ausgeführt.

Wenn eine Shell-Funktion ausgeführt wird, werden alle Shell-Positionsparameter (außer $ 0, die unverändert bleiben) auf die Argumente der Shell-Funktion gesetzt. Die Variablen, die explizit in der Umgebung des Befehls platziert werden (indem Sie ihnen vor dem Funktionsnamen Zuordnungen hinzufügen), werden lokal für die Funktion festgelegt und auf die angegebenen Werte gesetzt. Dann wird der in der Funktionsdefinition angegebene Befehl ausgeführt. Die Positionsparameter werden nach Abschluss des Befehls auf ihre ursprünglichen Werte zurückgesetzt. Dies geschieht alles innerhalb der aktuellen Shell.

Shell-Builtins werden intern in der Shell ausgeführt, ohne dass ein neuer Prozess erzeugt wird.

Wenn der Befehlsname nicht mit einer Funktion oder einem eingebauten Element ü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, derenASCII Die Repräsentation ist "#!". Execve (2) gibt dann Er ENOEXEC zurück.) Die Shell interpretiert das Programm in einer Subshell. Die untergeordnete Shell wird sich in diesem Fall neu initialisieren, so dass der Effekt so aussieht, als wäre eine neue Shell aufgerufen worden, um das Ad-hoc-Shell-Skript zu verarbeiten, mit der Ausnahme, dass die Position der Hash-Befehle in der übergeordneten Shell von der gespeichert wird Kind.

Beachten Sie, dass frühere Versionen dieses Dokuments und der Quellcode selbst irreführend und sporadisch auf ein Shell-Skript ohne eine magische Zahl als "Shell-Prozedur" verweisen.

Pfadsuche

Beim Suchen eines Befehls sucht die Shell zuerst, ob sie eine Shell-Funktion mit diesem Namen hat. Dann sucht es nach einem eingebauten Befehl mit diesem Namen. Wenn kein eingebauter Befehl gefunden wird, passiert eines von zwei Dingen:

  1. Befehlsnamen, die einen Schrägstrich enthalten, werden einfach ausgeführt, ohne Suchen durchzuführen.

  2. Die Shell durchsucht jeden Eintrag inPFAD wiederum für den Befehl. Der Wert vonPFADVariable sollte eine Reihe von Einträgen sein, die durch Doppelpunkte getrennt sind. Jeder Eintrag besteht aus einem Verzeichnisnamen. Das aktuelle Verzeichnis kann implizit durch einen leeren Verzeichnisnamen oder explizit durch eine einzelne Periode angegeben werden.

Befehlsexitstatus

Jeder Befehl hat einen Exit-Status, der das Verhalten anderer Shell-Befehle beeinflussen kann. Das Paradigma besteht darin, dass ein Befehl mit Null für Normal oder Erfolg und von Null für Fehler, Fehler oder eine falsche Anzeige ausgegeben wird. Die Manpage für jeden Befehl sollte die verschiedenen Beendigungscodes und deren Bedeutung angeben. Darüber hinaus geben die integrierten Befehle Exit-Codes zurück, ebenso wie eine ausgeführte Shell-Funktion.

Komplexe Befehle

Komplexe Befehle sind Kombinationen aus einfachen Befehlen mit Steueroperatoren oder reservierten Wörtern, die zusammen einen größeren Befehl bilden. Allgemeiner ist ein Befehl einer der folgenden:

  • einfacher Befehl
  • Pipeline
  • Liste oder zusammengesetzte Liste
  • zusammengesetzter Befehl
  • Funktionsdefinition

Wenn nicht anders angegeben, ist der Beendigungsstatus eines Befehls der des letzten einfachen Befehls, der vom Befehl ausgeführt wird.

Pipelines

Eine Pipeline ist eine Folge von einem oder mehreren Befehlen, die vom Steuerungsoperator | getrennt werden. Der Standardausgang aller außer dem letzten Befehl ist mit dem Standardeingang des nächsten Befehls verbunden. Die Standardausgabe des letzten Befehls wird wie üblich von der Shell geerbt.

Das Format für eine Pipeline lautet:

! Befehl1 | Befehl2 …

Der Standardausgang von Befehl1 ist mit dem Standardeingang von Befehl2 verbunden. Die Standardeingabe, Standardausgabe oder beides eines Befehls gilt als von der Pipeline zugewiesen, bevor eine Umleitung von Umleitungsoperatoren angegeben wird, die Teil des Befehls sind.

Wenn sich die Pipeline nicht im Hintergrund befindet (wird später erläutert), wartet die Shell, bis alle Befehle abgeschlossen sind.

Wenn das reservierte Wort! nicht vor der Pipeline, der Exit-Status ist der Exit-Status des letzten in der Pipeline angegebenen Befehls. Ansonsten ist der Exit-Status das logische NICHT des Exit-Status des letzten Befehls. Das heißt, wenn der letzte Befehl Null zurückgibt, ist der Beendigungsstatus 1; Wenn der letzte Befehl größer als Null ist, ist der Beendigungsstatus Null.

Da die Zuweisung der Standard- oder Standardausgabe oder beides vor der Umleitung erfolgt, kann sie durch Umleitung geändert werden. Zum Beispiel:

$ command1 2> & 1 | Befehl2

Sendet sowohl die Standardausgabe als auch den Standardfehler von command1 an die Standardeingabe von command2.

EIN ; oder terminator bewirkt, dass die vorhergehende UND-ODER-Liste (als nächstes beschrieben) sequentiell ausgeführt wird; Ein & bewirkt eine asynchrone Ausführung der vorhergehenden UND-ODER-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 eine eingebaute Shell. In diesem Fall wird sie in der aktuellen Shell ausgeführt. Die Auswirkungen auf die Umgebung werden jedoch gelöscht).

Hintergrundbefehle -

Wenn ein Befehl vom Steueroper-Operator kaufmännisches Und (&) beendet wird, führt die Shell den Befehl asynchron aus. Das heißt, die Shell wartet nicht auf den Abschluss des Befehls, bevor der nächste Befehl ausgeführt wird.

Das Format zum Ausführen eines Befehls im Hintergrund lautet:

Befehl1 & Befehl2 & …

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

Listen - Allgemeines

Eine Liste ist eine Folge von null oder mehr Befehlen, die durch Zeilenumbrüche, Semikolons oder Et-Zeichen getrennt sind und optional durch eines dieser drei Zeichen abgeschlossen werden. Die Befehle in einer Liste werden in der Reihenfolge ausgeführt, in der sie geschrieben werden. Wenn auf den Befehl ein kaufmännisches Und folgt, startet die Shell den Befehl und fährt sofort mit dem nächsten Befehl fort. Andernfalls wird auf den Abbruch des Befehls gewartet, bevor mit dem nächsten fortgefahren wird.

Kurzschlusslistenoperatoren

`&& '' und` ||| 'sind AND-OR-Listenoperatoren. `& & 'führt den ersten Befehl aus und dann den zweiten Befehl, wenn der Exit-Status des ersten Befehls Null ist. `|| '' ist ähnlich, führt jedoch den zweiten Befehl aus, wenn der Exit-Status des ersten Befehls ungleich Null ist. "&&" und "||" haben beide die gleiche Priorität.

Flow-Control Constructs - wenn, während, für, fallweise

Die Syntax des if-Befehls lautet

wenn Liste

dann liste auf

elif liste

dann Liste …

andere Liste

fi

Die Syntax des while-Befehls lautet

während Liste

liste auf

erledigt

Die beiden Listen werden wiederholt ausgeführt, während der Beendigungsstatus der ersten Liste Null ist. Der Befehl till ist ähnlich, hat jedoch das Wort bis while, wodurch er wiederholt wird, bis der Beendigungsstatus der ersten Liste Null ist.

Die Syntax des Befehls for lautet

für variabel in wort …

liste auf

erledigt

Die Wörter werden erweitert, und die Liste wird wiederholt ausgeführt, wobei die Variable für jedes Wort der Reihe nach festgelegt wird. do and done kann durch `` {'' und ``} '' ersetzt werden

Die Syntax des Befehls break and continue lautet

Pause Num

weiter num

Break beendet die Nummer innerhalb oder während der Loops. Fahren Sie mit der nächsten Iteration der innersten Schleife fort. Diese sind als eingebaute Befehle implementiert.

Die Syntax des case-Befehls lautet

Fallwort in

Muster) Liste ;;

esac

Das Muster kann tatsächlich ein oder mehrere Muster sein (siehe Shell-Muster, die später beschrieben werden), getrennt durch `` '' Zeichen.

Befehle zusammen gruppieren

Befehle können entweder schriftlich gruppiert werden

(Liste)

oder

{ Liste;

Die erste davon führt die Befehle in einer Subshell aus. Eingebaute Befehle, die in einer (Liste) gruppiert sind, wirken sich nicht auf die aktuelle Shell aus. Die zweite Form verzahnt keine andere Schale, ist also etwas effizienter. Durch das Gruppieren von Befehlen auf diese Weise können Sie die Ausgabe so umleiten, als wären sie ein Programm:

{printf hallo; printf world n ";}> Begrüßung

Funktionen

Die Syntax einer Funktionsdefinition lautet

Befehl name ()

Eine Funktionsdefinition ist eine ausführbare Anweisung. Wenn er ausgeführt wird, wird eine Funktion namens name installiert und der Exit-Status null zurückgegeben. Der Befehl ist normalerweise eine Liste zwischen `` {'' und ``} ''

Variablen können mit einem lokalen Befehl als lokal für eine Funktion deklariert werden. Dies sollte als erste Anweisung einer Funktion erscheinen und die Syntax lautet

local variable | - …

Local ist als eingebauter Befehl implementiert.

Wenn eine Variable als lokal festgelegt wird, erbt sie den Anfangswert und exportiert und schreibgeschützt von der Variablen mit demselben Namen im umgebenden Bereich (sofern vorhanden). Andernfalls wird die Variable zunächst nicht gesetzt. Die Shell verwendet dynamisches Scoping. Wenn Sie also die Variable x local zur Funktion f machen, die dann die Funktion g aufruft, beziehen sich Verweise auf die in g erstellte Variable x auf die in f deklarierte Variable x und nicht auf die globale Variable x .

Der einzige spezielle Parameter, der lokal gemacht werden kann, ist `` - ''. Shell-Optionen, die über den Befehl 'set' innerhalb der Funktion geändert werden, werden bei Rückkehr der Funktion auf ihre ursprünglichen Werte zurückgesetzt.

Die Syntax des Rückkehrbefehls lautet

return exitstatus

Es beendet die aktuell ausgeführte Funktion. Return wird als eingebauter Befehl implementiert.

Variablen und Parameter

Die Shell verwaltet eine Reihe von Parametern. Ein mit einem Namen bezeichneter Parameter wird als Variable bezeichnet. Beim Start wandelt die Shell alle Umgebungsvariablen in Shell-Variablen um. Neue Variablen können über das Formular gesetzt werden

name = wert

Vom Benutzer festgelegte Variablen müssen einen Namen haben, der ausschließlich aus Buchstaben, Ziffern und Unterstrichen besteht. Der erste darf nicht numerisch sein. Ein Parameter kann auch mit einer Zahl oder einem Sonderzeichen angegeben werden, wie unten erläutert.

Positionsparameter

Ein Positionsparameter ist ein Parameter, der durch eine Zahl (n> 0) gekennzeichnet ist. Die Shell setzt diese anfänglich auf die Werte ihrer Befehlszeilenargumente, die auf den Namen des Shellskripts folgen. Das eingebaute Set (1) kann auch zum Setzen oder Zurücksetzen verwendet werden.

Spezielle Parameter

Ein spezieller Parameter ist ein Parameter, der mit einem der folgenden Sonderzeichen gekennzeichnet ist. Der Wert des Parameters wird neben seinem Zeichen angezeigt.

*

Wird zu den Positionsparametern erweitert, beginnend mit einem. Wenn die Erweiterung in einer doppelten Anführungszeichenfolge auftritt, wird sie zu einem einzelnen Feld erweitert, wobei der Wert jedes Parameters durch das erste Zeichen der Zeichenfolge getrennt wirdIFS variabel oder durch a obIFS ist unset

@

Wird zu den Positionsparametern erweitert, beginnend mit einem.Wenn die Erweiterung in Anführungszeichen erfolgt, wird jeder Positionsparameter als separates Argument erweitert. Wenn keine Positionsparameter vorhanden sind, generiert die Erweiterung von @ null Argumente, selbst wenn @ in Anführungszeichen steht. Das bedeutet im Wesentlichen, wenn $ 1 'abc' und $ 2 'def ghi' 'ist, dann erweitert Qq $ @ die beiden Argumente:

abc def ghi

#

Erweitert auf die Anzahl der Positionsparameter.

?

Wird auf den Exit-Status der neuesten Pipeline erweitert.

- (Bindestrich.)

Wird zu den aktuellen Optionsflags (den aus einem String verketteten Optionsnamen mit einem Buchstaben) erweitert, die beim Aufruf, durch den Befehl set builtin oder implizit durch die Shell angegeben werden.

$

Wird zur Prozess-ID der aufgerufenen Shell erweitert. Eine Subshell behält den gleichen Wert von $ wie das übergeordnete Element bei.

!

Erweitert auf die Prozess-ID des neuesten Hintergrundbefehls, der von der aktuellen Shell ausgeführt wird. Für eine Pipeline ist die Prozess-ID die des letzten Befehls in der Pipeline.

0 (Null)

Erweitert auf den Namen der Shell oder des Shell-Skripts.

Word-Erweiterungen

Diese Klausel beschreibt die verschiedenen Erweiterungen, die für Wörter ausgeführt werden. Nicht alle Erweiterungen werden für jedes Wort ausgeführt, wie später erläutert wird.

Tilde-Erweiterungen, Parametererweiterungen, Befehlssubstitutionen, Arithmetikerweiterungen und Zitatentfernungen, die in einem einzelnen Wort vorkommen, werden zu einem einzelnen Feld erweitert. Nur durch Feldaufteilung oder Pfadnamenerweiterung können mehrere Felder aus einem einzigen Wort erstellt werden. Die einzige Ausnahme von dieser Regel ist die Erweiterung des speziellen Parameters @ in Anführungszeichen, wie oben beschrieben.

Die Reihenfolge der Worterweiterung lautet:

  1. Tilde-Erweiterung, Parametererweiterung, Befehlssubstitution, Arithmetik-Erweiterung (alle treten gleichzeitig auf).

  2. Die Feldaufteilung wird für Felder durchgeführt, die in Schritt (1) erstellt wurden, sofern nichtIFS Variable ist null.

  3. Erweiterung des Pfadnamens (sofern nicht gesetzt -f ist wirksam).

  4. Zitat entfernen.

Das Zeichen $ dient zur Einführung von Parametererweiterung, Befehlssubstitution oder arithmetischer Auswertung.

Tilde-Erweiterung (ersetzt das Basisverzeichnis eines Benutzers)

Ein Wort, das mit einem nicht zitierten 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 Heimatverzeichnis des Benutzers ersetzt. Wenn der Benutzername fehlt (wie in ~ / foobar), wird die Tilde durch den Wert von ersetzt ZUHAUSE Variable (das Heimatverzeichnis des aktuellen Benutzers).

Parametererweiterung

Das Format für die Parametererweiterung lautet wie folgt:

$ {Ausdruck}

Dabei besteht der Ausdruck aus allen Zeichen, bis der übereinstimmende ``} '' Ein beliebiger ``} '', der durch einen umgekehrten Schrägstrich oder in einer Zeichenfolge in Anführungszeichen eingeschlossen ist, und Zeichen in eingebetteten arithmetischen Erweiterungen, Befehlssubstitutionen und Variablenerweiterungen bei der Bestimmung der Zeichenfolge nicht berücksichtigt werden passende ``} ''

Die einfachste Form für die Parametererweiterung ist:

$ {Parameter}

Der Wert des Parameters (falls vorhanden) wird ersetzt.

Der Parametername oder das Symbol kann in geschweifte Klammern eingeschlossen werden. Diese sind optional, außer für Positionsparameter mit mehr als einer Ziffer oder wenn auf den Parameter ein Zeichen folgt, das als Teil des Namens interpretiert werden kann. Wenn eine Parametererweiterung in Anführungszeichen auftritt:

  1. Die Erweiterung des Pfadnamens wird für die Erweiterungsergebnisse nicht durchgeführt.

  2. Bei den Erweiterungsergebnissen wird mit Ausnahme von @ keine Feldaufteilung durchgeführt.

Darüber hinaus kann eine Parametererweiterung mithilfe eines der folgenden Formate geändert werden.

$ {parameter: -word}

Verwenden Sie Standardwerte. Wenn der Parameter unset oder null ist, wird die Erweiterung des Wortes verwendet. Andernfalls wird der Wert des Parameters ersetzt.

$ {parameter: = word}

Standardwerte zuordnen Wenn der Parameter unset oder null ist, wird die Erweiterung des Wortes dem Parameter zugewiesen. In allen Fällen wird der endgültige Wert des Parameters ersetzt. Auf diese Weise können nur Variablen, keine Positionsparameter oder spezielle Parameter, zugewiesen werden.

$ {Parameter:? Wort}

Fehler anzeigen, wenn Null oder Nicht gesetzt. Wenn der Parameter unset oder null ist, wird die Erweiterung von word (oder eine Nachricht, die besagt, dass es nicht gesetzt wird, wenn word nicht angegeben wird) in Standardfehler geschrieben und die Shell wird mit einem Exit-Status ungleich Null beendet. Andernfalls wird der Wert des Parameters ersetzt. Eine interaktive Shell muss nicht beendet werden.

$ {parameter: + word}

Alternativwert verwenden. Wenn der Parameter unset oder null ist, wird null verwendet. Andernfalls wird die Erweiterung des Wortes ersetzt.

In den zuvor gezeigten Parametererweiterungen führt die Verwendung des Doppelpunkts im Format zu einem Test für einen Parameter, der nicht festgelegt oder null ist. Die Auslassung des Doppelpunkts führt zu einem Test für einen Parameter, der nur nicht gesetzt ist.

$ {# parameter}

String-Länge. Die Länge des Parameters in Zeichen.

Die folgenden vier Varianten der Parametererweiterung ermöglichen die Verarbeitung von Teilstrings. In jedem Fall wird die Mustervergleichsnotation (siehe Shell-Muster) anstelle der regulären Ausdrucksnotation verwendet, um die Muster auszuwerten. Wenn der Parameter * oder @ ist, ist das Ergebnis der Erweiterung nicht angegeben. Das Einschließen der vollständigen Parametererweiterungszeichenfolge in doppelte Anführungszeichen bewirkt nicht, dass die folgenden vier Arten von Musterzeichen in Anführungszeichen gesetzt werden, wohingegen Anführungszeichen in Klammern diese Auswirkung haben.

$ {parameter% word}

Kleinstes Suffixmuster entfernen. Das Wort wird erweitert, um ein Muster zu erzeugen. Die Parametererweiterung führt dann zu einem Parameter, wobei der kleinste Teil des Suffixes mit dem Muster übereinstimmt, das gelöscht wird.

$ {parameter %% word}

Entfernen Sie das größte Suffixmuster.Das Wort wird erweitert, um ein Muster zu erzeugen. Die Parametererweiterung führt dann zu einem Parameter, wobei der größte Teil des Suffixes mit dem Muster übereinstimmt, das gelöscht wird.

$ {parameter # word}

Kleinstes Präfixmuster entfernen. Das Wort wird erweitert, um ein Muster zu erzeugen. Die Parametererweiterung führt dann zu einem Parameter, wobei der kleinste Teil des Präfixes mit dem Muster übereinstimmt, das gelöscht wird.

$ {parameter ## word}

Entferne das größte Präfixmuster. Das Wort wird erweitert, um ein Muster zu erzeugen. Die Parametererweiterung führt dann zu einem Parameter, wobei der größte Teil des Präfixes mit dem Muster übereinstimmt, das gelöscht wird.

Befehlsersetzung

Durch die Befehlsersetzung kann die Ausgabe eines Befehls anstelle des Befehlsnamens selbst ersetzt werden. Die Befehlsersetzung erfolgt, wenn der Befehl wie folgt eingeschlossen ist:

$ (Befehl)

oder Po "backquoted" Version Pc:

"Befehl"

Die Shell erweitert die Befehlsersetzung, indem sie einen Befehl in einer Subshell-Umgebung ausführt und die Befehlsersetzung durch die Standardausgabe des Befehls ersetzt, wobei Sequenzen von einer oder mehreren entfernt werden s am Ende der Auswechslung. (Eingebettet s vor dem Ende der Ausgabe werden nicht entfernt; Bei der Feldaufteilung können sie jedoch in übersetzt werden s, abhängig vom Wert vonIFS und zitieren, dass in Kraft ist.)

Arithmetische Erweiterung

Die arithmetische Erweiterung bietet einen Mechanismus, um einen arithmetischen Ausdruck zu bewerten und seinen Wert zu ersetzen. Das Format für die arithmetische Erweiterung lautet wie folgt:

$ ((Ausdruck))

Der Ausdruck wird wie in Anführungszeichen behandelt, mit der Ausnahme, dass ein Anführungszeichen innerhalb des Ausdrucks nicht speziell behandelt wird. Die Shell erweitert alle Token im Ausdruck für die Parametererweiterung, die Befehlsersetzung und das Entfernen von Anführungszeichen.

Als Nächstes behandelt die Shell dies als arithmetischen Ausdruck und ersetzt den Wert des Ausdrucks.

Leerzeichenaufteilung (Feldaufteilung)

Nach der Parametererweiterung, Befehlssubstitution und Arithmetikerweiterung durchsucht die Shell die Ergebnisse von Erweiterungen und Ersetzungen, die nicht in doppelten Anführungszeichen für die Feldaufteilung vorkommen, und es können mehrere Felder entstehen.

Die Shell behandelt jeden Charakter derIFS als Trennzeichen und verwenden Sie die Trennzeichen, um die Ergebnisse der Parametererweiterung und Befehlssubstitution in Felder aufzuteilen.

Erweiterung des Pfadnamens (Generierung von Dateinamen)

Es sei denn, die -f Wenn das Flag 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. Bei der Erweiterung wird das Wort durch die Namen aller vorhandenen Dateien ersetzt, deren Namen gebildet werden können, indem jedes Muster durch eine Zeichenfolge ersetzt wird, die dem angegebenen Muster entspricht. Hier gibt es zwei Einschränkungen: Erstens kann ein Muster nicht mit einer Zeichenfolge übereinstimmen, die einen Schrägstrich enthält, und zweitens kann ein Muster nicht mit einer Zeichenfolge übereinstimmen, die mit einem Punkt beginnt, es sei denn, das erste Zeichen des Musters ist ein Punkt. Im nächsten Abschnitt werden die Muster beschrieben, die sowohl für die Erweiterung des Pfadnamens als auch für den Befehl case (1) verwendet werden.

Muschelmuster

Ein Muster besteht aus normalen Zeichen, die sich selbst entsprechen, und Metazeichen. Die Metazeichen sind "!", "*", "?" Und "". Diese Charaktere verlieren ihre besonderen Bedeutungen, wenn sie in Anführungszeichen gesetzt werden. Wenn eine Befehls- oder Variablensubstitution ausgeführt wird und das Dollarzeichen oder die Anführungszeichen nicht in doppelte Anführungszeichen gesetzt werden, wird der Wert der Variablen oder die Ausgabe des Befehls nach diesen Zeichen durchsucht und in Metazeichen umgewandelt.

Ein Sternchen (`` * '') entspricht einer beliebigen Zeichenfolge. Ein Fragezeichen entspricht einem einzelnen Zeichen. Eine linke Klammer (`` '') führt eine Zeichenklasse ein. Das Ende der Zeichenklasse wird durch ein (`` '') angezeigt. Fehlt das `` ', dann entspricht das `' 'einem` `' ', anstatt eine Zeichenklasse einzuführen. Eine Zeichenklasse entspricht einem beliebigen Zeichen in eckigen Klammern. Ein Zeichenbereich kann mit einem Minuszeichen angegeben werden. Die Zeichenklasse kann durch ein Ausrufezeichen als erstes Zeichen der Zeichenklasse ergänzt werden.

Um ein `` '' in eine Zeichenklasse aufzunehmen, machen Sie es zum ersten aufgelisteten Zeichen (nach dem ``! '' Falls vorhanden). Um ein Minuszeichen einzufügen, machen Sie es als erstes oder letztes Zeichen aufgeführt

Builtins

In diesem Abschnitt werden die integrierten Befehle aufgelistet, die integriert sind, da sie bestimmte Vorgänge ausführen müssen, die nicht von einem separaten Prozess ausgeführt werden können. Zusätzlich zu diesen gibt es mehrere andere Befehle, die aus Effizienzgründen eingebaut werden können (z. B. Echo 1).

:

Ein Nullbefehl, der einen Exitwert von 0 (wahr) zurückgibt.

. Datei

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

alias Name = Zeichenfolge …

Ob name = string angegeben wird, definiert die Shell den Alias Name mit Wert Schnur Wenn nur Name angegeben wird, der Wert des Alias Name wird gedruckt. Ohne Argumente diealias Builtin druckt die Namen und Werte aller definierten Aliase (sieheUnalias)

bg Job …

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

Befehl Befehl arg …

Führen Sie den angegebenen integrierten Befehl aus. (Dies ist nützlich, wenn Sie eine Shell-Funktion mit demselben Namen wie ein eingebauter Befehl haben.)

CD Verzeichnis

Wechseln Sie in das angegebene Verzeichnis (Standardeinstellung)$ HOME) Wenn ein Eintrag fürCDPATH erscheint in der Umgebung derCD Befehl oder die Shell-VariableCDPATH gesetzt ist und der Verzeichnisname nicht mit einem Schrägstrich beginnt, dann werden die Verzeichnisse in aufgeführtCDPATH wird nach dem angegebenen Verzeichnis gesucht. Das Format vonCDPATH ist das gleiche wie das vonPFAD In einer interaktiven Shell dieCD Der Befehl gibt den Namen des Verzeichnisses aus, in das er tatsächlich gewechselt hat, wenn sich dieses von dem Namen unterscheidet, den der Benutzer angegeben hat. Diese können sich entweder wegen derCDPATH Mechanismus wurde verwendet oder weil ein symbolischer Link gekreuzt wurde.

eval Schnur …

Verketten Sie alle Argumente mit Leerzeichen. Dann erneut analysieren und den Befehl ausführen.

exec Befehl arg …

Wenn der Befehl nicht ausgelassen wird, wird der Shell-Prozess durch das angegebene Programm ersetzt (bei dem es sich um ein echtes Programm handeln muss, nicht um eine eingebaute Shell oder Funktion). Alle Umleitungen auf derexecBefehle werden als permanent markiert, damit sie nicht rückgängig gemacht werden, wenn dieexec Befehl wird beendet.

Ausfahrt exitstatus

Beenden Sie den Shell-Prozess. Ob exitstatus Wird angegeben, wird es 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 aufzuheben, besteht darin, sie zu löschen. Die Shell ermöglicht, dass der Wert einer Variablen gleichzeitig mit dem Export durch Schreiben festgelegt wird

Exportname = Wert

Ohne Argumente listet der Exportbefehl die Namen aller exportierten Variablen auf. Mit dem -pOption angegeben, wird die Ausgabe für die nicht interaktive Verwendung geeignet formatiert.

fc-e Editor zuerst zuletzt

fc -l -Nr zuerst zuletzt

fc -s alt = neu zuerst

Dasfc Eingebaute Listen oder Bearbeitungen und Wiederholungen von Befehlen, die zuvor in einer interaktiven Shell eingegeben wurden.

-e Editor

Verwenden Sie den vom Editor benannten Editor, um die Befehle zu bearbeiten. Die Zeichenfolge des Editors ist ein Befehlsname, der über das Symbol durchsucht werden kannPFAD Variable. Der Wert in derFCEDIT Variable wird als Standard verwendet, wenn -e ist nicht angegeben. ObFCEDIT ist null oder nicht gesetzt, der Wert vonEDITOR Variable wird verwendet. ObEDITOR ist null oder nicht gesetzt, ed (1) wird als Editor verwendet.

-l (ell)

Listen Sie die Befehle auf, anstatt einen Editor aufzurufen. Die Befehle werden in der Reihenfolge geschrieben, die vom ersten und letzten Operanden angegeben wird.r Bei jedem Befehl wird die Befehlsnummer vorangestellt.

-n

Befehlsnummern unterdrücken, wenn Sie mit -l auflisten.

-r

Reihenfolge der aufgeführten Befehle umkehren (mit -l oder bearbeitet (mit weder - nochl Noch -s)

-s

Führen Sie den Befehl erneut aus, ohne einen Editor aufzurufen.

zuerst

zuletzt

Wählen Sie die Befehle aus, die Sie auflisten oder bearbeiten möchten. Die Anzahl der vorherigen Befehle, auf die zugegriffen werden kann, wird durch den Wert von bestimmtHISTSIZE Variable. Der Wert von first oder last oder von beidem ist einer der folgenden:

+ Nummer

Eine positive Zahl, die eine Befehlsnummer darstellt; Befehlsnummern können mit - angezeigt werdenl Möglichkeit.

-Nummer

Eine negative Dezimalzahl, die den Befehl darstellt, der zuvor ausgeführt wurde. Zum Beispiel ist -1 der unmittelbar vorhergehende Befehl.

Schnur

Eine Zeichenfolge, die den zuletzt eingegebenen Befehl angibt, der mit dieser Zeichenfolge beginnt. Wenn der alte = neue Operand nicht auch mit - angegeben wirds Die Stringform des ersten Operanden darf kein eingebettetes Gleichheitszeichen enthalten.

Die folgenden Umgebungsvariablen beeinflussen die Ausführung von fc:

FCEDIT

Name des zu verwendenden Editors

HISTSIZE

Die Anzahl der vorherigen Befehle, auf die zugegriffen werden kann.

fg Job

Verschieben Sie den angegebenen Job oder den aktuellen Job in den Vordergrund.

Getopts optstring var

DasPOSIX Getopts Befehl, nicht mit dem verwechselt werden Bell Labs abgeleitete Getopt (1).

Das erste Argument sollte eine Reihe von Buchstaben sein, auf die optional ein Doppelpunkt folgen kann, um anzuzeigen, dass für die Option ein Argument erforderlich ist. Die angegebene Variable wird auf die analysierte Option gesetzt.

DasGetopts Der Befehl lehnt das ältere Dienstprogramm 'getopt (1)' ab, weil es Argumente enthält, die Whitespace enthalten.

DasGetopts Builtin kann verwendet werden, um Optionen und ihre Argumente aus einer Liste von Parametern zu erhalten. Wenn aufgerufen,Getopts fügt den Wert der nächsten Option aus der Optionszeichenfolge in der Liste in der Shell-Variablen ein, die durch angegeben wird var und es ist Index in der Shell-VariablenOPTIND Wenn die Shell aufgerufen wird,OPTIND wird auf 1 initialisiert. Für jede Option, für die ein Argument erforderlich ist, wird derGetopts Builtin wird es in die Shell-Variable einfügenOPTARG Wenn eine Option in der nicht zulässig ist optstring dannOPTARG wird unset sein

optstring ist eine Zeichenfolge von erkannten Optionsbuchstaben. Wenn auf einen Buchstaben ein Doppelpunkt folgt, wird erwartet, dass die Option ein Argument hat, das durch Leerzeichen von ihm getrennt werden kann. Wenn ein Optionszeichen nicht erwartet wird,Getopts wird die Variable setzen var zu einem ``? ''Getopts wird dann nicht gesetztOPTARG und schreibe Ausgabe auf Standardfehler. Durch die Angabe eines Doppelpunkts als erstes Zeichen von optstring Alle Fehler werden ignoriert.

Ein Wert ungleich Null wird zurückgegeben, wenn die letzte Option erreicht ist. Wenn es keine verbleibenden Argumente gibt,Getopts wird eingestellt var auf die spezielle Option `` - '', sonst wird es gesetzt var zu ``? ''

Das folgende Codefragment zeigt, wie die Argumente für einen Befehl verarbeitet werden können, der die Optionen a und b und die Option c, für die ein Argument erforderlich ist, aufnehmen kann.

während getopts abc: ftunFall $ f ina | b) flag = $ f ;;c) carg = $ OPTARG ;;?) Echo $ USAGE; Ausfahrt 1 ;;esacerledigtverschiebe 'expr $ OPTIND - 1'

Dieser Code akzeptiert Folgendes als gleichwertig:

cmd -acarg-Dateicmd -a -c Argumentdateicmd -carg -a Dateicmd -a -carg - Datei

Hash -rv Befehl…

Die Shell unterhält eine Hashtabelle, die die Positionen der Befehle speichert. Ohne irgendwelche Argumente diehash Befehl druckt den Inhalt dieser Tabelle aus. Einträge, die seit dem letzten Mal nicht angesehen wurdenCD Befehl sind mit einem Sternchen markiert; Es ist möglich, dass diese Einträge ungültig sind.

Mit Argumenten diehash Der Befehl entfernt die angegebenen Befehle aus der Hashtabelle (sofern es sich nicht um Funktionen handelt) und sucht sie dann. Mit dem -v Bei dieser Option druckt Hash die Positionen der Befehle, sobald sie gefunden werden. Das -r Diese Option bewirkt, dass der Befehl hash alle Einträge in der Hashtabelle außer Funktionen löscht.

Job-ID Job

Drucken Sie die Prozess-IDs der Prozesse im Job. Wenn die Job Argument wird weggelassen, der aktuelle Job wird verwendet.

Arbeitsplätze

Dieser Befehl listet alle Hintergrundprozesse auf, die dem aktuellen Shell-Prozess untergeordnet sind.

pwd

Drucken Sie das aktuelle Verzeichnis. Der Builtin-Befehl kann sich von dem Programm mit demselben Namen unterscheiden, da der Builtin-Befehl sich an das aktuelle Verzeichnis erinnert und nicht jedes Mal neu berechnet. Das macht es schneller. Wenn das aktuelle Verzeichnis jedoch umbenannt wird, wird die integrierte Version vonpwd wird weiterhin den alten Namen für das Verzeichnis drucken.

lesen-p Prompt -r Variable…

Die Eingabeaufforderung wird gedruckt, wenn die -p Option ist angegeben und die Standardeingabe ist ein Terminal. Dann wird eine Zeile von der Standardeingabe gelesen. Die nachfolgende Zeile wird aus der Zeile gelöscht, und die Zeile wird wie oben im Abschnitt zur Wortaufteilung beschrieben aufgeteilt. Die Teile werden den Variablen in dieser Reihenfolge zugewiesen. Es muss mindestens eine Variable angegeben werden. Wenn mehr Teile als Variablen vorhanden sind, werden die restlichen Teile (zusammen mit den Zeichen inIFS werden getrennt) der letzten Variablen zugewiesen. Wenn mehr Variablen als Teile vorhanden sind, wird den restlichen Variablen die Nullzeichenfolge zugewiesen. Daslesen builtin zeigt Erfolg an, wenn bei der Eingabe kein EOF auftritt. In diesem Fall wird ein Fehler zurückgegeben.

Standardmäßig, sofern nicht die -r Wenn die Option angegeben ist, fungiert der umgekehrte Schrägstrich '' 'als Escape-Zeichen, wodurch das folgende Zeichen wörtlich behandelt wird. Wenn auf einen Backslash ein Zeilenvorschub folgt, werden der Backslash und der Zeilenvorschub gelöscht.

schreibgeschützt Name…

readonly -p

Die angegebenen Namen sind als schreibgeschützt markiert, sodass sie nicht nachträglich geändert oder deaktiviert werden können. Die Shell erlaubt es, den Wert einer Variablen gleichzeitig zu setzen, wenn sie als schreibgeschützt markiert wird

Readonly Name = Wert

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

einstellen { -Optionen | + Optionen | - arg …

Daseinstellen Der Befehl führt drei verschiedene Funktionen aus.

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

Wenn Optionen angegeben werden, werden die angegebenen Optionsflags gesetzt oder gelöscht, wie im Abschnitt Verarbeitung von Sx-Argumentlisten beschrieben.

Der dritte Befehl für den Befehl set besteht darin, die Werte der Positionsparameter der Shell auf die angegebenen Argumente festzulegen. Um die Positionsparameter zu ändern, ohne Optionen zu ändern, verwenden Sie `` - '' als erstes Argument. Wenn keine Argumente vorhanden sind, löscht der Befehl set alle Positionsparameter (entspricht der Ausführung von "shift $ #".).

variabler Wert

Weist der Variablen einen Wert zu. (Im Allgemeinen ist es besser, variable = value zu schreiben als zu verwendenSetvar Setvarsoll in Funktionen verwendet werden, die Variablen Werte zuweisen, deren Namen als Parameter übergeben werden.)

Verschiebung n

Verschieben Sie die Positionsparameter n-mal. EINVerschiebung setzt den Wert von $1 auf den Wert von $2 der Wert von $2 auf den Wert von $3 und so weiter, den Wert von verringern $# einzeln. Wenn n größer als die Anzahl der Positionsparameter ist,Verschiebung gibt eine Fehlermeldung aus und beendet den Rückgabestatus 2.

mal

Drucken Sie die gesammelten Benutzer- und Systemzeiten für die Shell und für Prozesse, die von der Shell ausgeführt werden. Der Rückgabestatus ist 0.

Falle Aktion Signal…

Veranlassen, dass die Shell eine Aktion analysiert und ausführt, wenn eines der angegebenen Signale empfangen wird. Die Signale werden durch die Signalnummer angegeben. Ob Signal ist0 Die Aktion wird ausgeführt, wenn die Shell beendet wird. Aktion kann null oder "-" sein. Das erstere bewirkt, dass das angegebene Signal ignoriert wird, und das Letztere bewirkt, dass die Standardaktion ausgeführt wird. Wenn die Shell eine Subshell abgibt, setzt sie eingefangene (aber nicht ignorierte) Signale auf die Standardaktion zurück. DasFalle Der Befehl hat keine Auswirkungen auf Signale, die beim Eintritt in die Shell ignoriert wurden.

Art Name …

Interpretieren Sie jeden Namen als Befehl und drucken Sie die Auflösung der Befehlssuche aus. Mögliche Auflösungen sind: Shell-Schlüsselwort, Alias, Shell-Builtin, Befehl, verfolgter Alias ​​und nicht gefunden. Bei Aliasnamen wird die Alias-Erweiterung gedruckt. Für Befehle und nachverfolgte Aliase wird der vollständige Pfadname des Befehls gedruckt.

ulimit-H-S -ein -tfdscmlpn Wert

Erkundigen Sie sich nach harten oder weichen Limits für Prozesse oder setzen Sie neue Limits.Die Wahl zwischen einem harten Grenzwert (gegen den kein Prozess verstoßen darf und der nach dem Absenken nicht erhöht werden darf) und einem weichen Grenzwert (der dazu führt, dass Prozesse signalisiert, aber nicht notwendigerweise abgebrochen werden und die möglicherweise angehoben werden), werden getroffen diese Flaggen:

-H

Festlegen oder erkundigen Sie sich nach harten Grenzen

-S

Soft Limits festlegen oder abfragen. Wenn keiner -H Noch -S angegeben ist, wird der Soft-Grenzwert angezeigt oder beide Grenzwerte werden gesetzt. Wenn beide angegeben sind, gewinnt der letzte.

Das Limit, das abgefragt oder eingestellt werden soll, wird dann durch Angabe eines der folgenden Flags ausgewählt:

-ein

Alle aktuellen Grenzwerte anzeigen

-t

Begrenzung der CPU-Zeit (in Sekunden) anzeigen oder festlegen

-f

das Limit für die größte Datei anzeigen oder festlegen, die erstellt werden kann (in 512-Byte-Blöcken)

-d

Begrenzung der Datensegmentgröße eines Prozesses (in Kilobytes) anzeigen oder festlegen

-s

Begrenzung der Stackgröße eines Prozesses (in Kilobytes) anzeigen oder festlegen

-c

das Limit für die größte produzierbare Core-Dump-Größe anzeigen oder festlegen (in 512-Byte-Blöcken)

-m

Den Grenzwert für den gesamten physischen Speicher, der von einem Prozess verwendet werden kann (in Kilobyte), anzeigen oder festlegen

-l

das Limit anzeigen oder festlegen, wie viel Speicher ein Prozess mit mlock (2) sperren kann (in Kilobytes)

-p

das Limit für die Anzahl der Prozesse anzeigen oder festlegen, die dieser Benutzer gleichzeitig haben kann

-n

das Limit für die Anzahl von Dateien anzeigen oder festlegen, die ein Prozess gleichzeitig geöffnet haben kann

Wenn keine davon angegeben wird, wird die Begrenzung der Dateigröße angezeigt oder festgelegt. Wenn ein Wert angegeben wird, wird der Grenzwert auf diese Anzahl festgelegt. Andernfalls wird die aktuelle Grenze angezeigt.

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

Umask Maske

Stellen Sie den Wert von umask (siehe umask (2)) auf den angegebenen Oktalwert. Wenn das Argument nicht angegeben wird, wird der umask-Wert gedruckt.

Unalias-ein Name

Ob Name angegeben wird, entfernt die Shell diesen Alias. Ob -ein angegeben ist, werden alle Aliase entfernt.

unset Name…

Die angegebenen Variablen und Funktionen sind nicht gesetzt und nicht exportiert. Wenn ein Vorname sowohl einer Variablen als auch einer Funktion entspricht, werden sowohl die Variable als auch die Funktion nicht gesetzt.

warten Job

Warten Sie, bis der angegebene Job abgeschlossen ist, und geben Sie den Beendigungsstatus des letzten Prozesses im Job zurück. Wenn das Argument nicht angegeben wird, warten Sie, bis alle Jobs abgeschlossen sind, und geben Sie den Exit-Status Null zurück.

Befehlszeile bearbeiten

WannSch wird interaktiv von einem Terminal aus verwendet, der aktuelle Befehl und der Befehlsverlauf (siehefc in Sx Builtins) kann mit der vi-mode Befehlszeilenbearbeitung bearbeitet werden. Dieser Modus verwendet Befehle, die unten beschrieben werden, ähnlich einer Untermenge der auf der vi-Man-Seite beschriebenen. Der Befehl `set '-o vi ermöglicht die Bearbeitung im vi-Modus und versetzt sh in den vi-Einfügemodus. Bei aktiviertem vi-Modus kann sh zwischen dem Einfügemodus und dem Befehlsmodus umgeschaltet werden. Der Editor ist hier nicht vollständig beschrieben, wird sich aber in einem späteren Dokument befinden. Es ist ähnlich wie bei vi: Wenn Sie Aq ESC eingeben, werden Sie in den Befehls-VI-Befehlsmodus versetzt. Wenn Sie im Befehlsmodus Aq return drücken, wird die Linie an die Shell übergeben.

Verwenden Sie die Mann Befehl ( % Mann ), um zu sehen, wie ein Befehl auf Ihrem Computer verwendet wird.