Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

command - einfaches Kommando ausführen

&pagelevel(4)&pagelevel

(execute a simple command)


command teilt der Shell mit, dass die Argumente als einfache Kommandos auszuführen sind. Die Auswertung der Shell-Funktionen wird unterdrückt.

command liefert auch Informationen darüber, wie der Name eines Kommandos von der Shell interpretiert wird (siehe Format 2).

Syntax


Format 1: command[ -p] kommando_name[ argument ...]
Format 2: command[ -v| -V] kommando_name



Format 1: command [ -p] kommando_name [ argument ...]

-p

Die Kommandosuche wird mit einem Standardwert für PATH durchgeführt, mit dem alle Standard-Kommandos sicher gefunden werden.

kommando_name

Der Name eines Kommandos oder eines speziellen eingebauten Kommandos.

argument

Eine der Zeichenketten als Argument für kommando_name.


Format 2: command[ -v | -V] kommando_name

-v

Es wird eine Zeichenkette auf die Standard-Ausgabe geschrieben, die den Pfadnamen oder das Kommando angibt, mit dem die Shell in der aktuellen Shell-Umgebung kommando_name aufruft.

  • Kommandos, reguläre eingebaute Kommandos, kommando_namen, die einen Schrägstrich enthalten sowie implementationsspezifische Funktionen, die durch die Variable PATH angegeben werden, werden als absolute Pfadnamen geschrieben.

  • Shell-Funktionen, spezielle eingebaute Kommandos und reguläre eingebaute Kommandos, die nicht über die Definition in der PATH-Variablen erreichbar sind, sowie reservierte Begriffe der Shell werden als einfache Namen angegeben.

  • Ein Alias-Name wird als Aufrufzeile geschrieben, die die Alias-Definition darstellt.

  • Andernfalls wird nicht in die Ausgabe geschrieben. Der Endestatus gibt an, dass der Name nicht gefunden werden konnte.

Die Standard-Ausgabe wird folgendermaßen formatiert: "%s\n", <pfadname oder kommando>

-V

Es wird eine Zeichenkette auf die Standard-Ausgabe geschrieben, die angibt, wie der Name im Operanden kommando_name in der aktuellen Shell-Umgebung von der Shell interpretiert wird. Obwohl das Format der Zeichenkette nicht angegeben ist, wird trotzdem festgelegt, in welche der folgenden Kategorien kommando_name gehört. Außerdem sind dadurch die zugehörigen Informationen festgelegt:

  • Kommandos, reguläre eingebaute Kommandos sowie implementationsspezifische Funktionen, die über die Variable PATH gefunden werden, werden als solche gekennzeichnet. Sie enthalten den absoluten Pfadnamen in der Zeichenkette.

  • Andere Shell-Funktionen werden als Funktionen gekennzeichnet.

  • Alias-Namen werden als Alias-Namen gekennzeichnet. Die Definitionen werden in der Zeichenkette angegeben.

  • Spezielle eingebaute Kommandos werden als spezielle eingebaute Kommandos gekennzeichnet.

  • Reguläre eingebaute Kommandos, die nicht über die Definition in der PATH-Variablen erreichbar sind, werden als reguläre eingebaute Kommandos gekennzeichnet. (Der Begriff „regulär“ ist optional.)

  • Reservierte Begriffe der Shell werden als reservierte Begriffe gekennzeichnet.

Die Standard-Ausgabe wird folgendermaßen formatiert: "%s\n", <unbestimmt>

kommando_name

Der Name eines Kommandos oder eines speziellen eingebauten Kommandos.

Anwendungsgebiet

Über die Reihenfolge für die Kommandosuche können Funktionen reguläre eingebaute Kommandos und die Suchreihenfolge für Pfade außer Kraft setzen. Dies ist notwendig, damit Funktionen, die für Kommandos denselben Namen haben, dieses Kommando aufrufen können (statt eines rekursiven Aufrufs der Funktion).

Der Standard-Systempfad ist über getconf verfügbar. Da für getconf vor einem Aufruf unter Umständen PATH bereits eingerichtet sein muss, steht die folgende Option zur Verfügung:

command -p getconf _CS_PATH

Gelegentlich kann es von Vorteil sein, die Eigenschaften spezieller eingebauter Kommandos zu unterdrücken. Zum Beispiel:

command exec > nicht_beschreibbare_Datei

Bei dieser Eingabe wird eine nicht-interaktive Prozedur nicht abgebrochen. Der Ausgabe-Status kann von der Prozedur abgefragt werden.

Für command, env, nohup, time und xargs wird der Rückgabecode 127 verwendet, wenn ein Fehler auftritt oder kommando_name nicht gefunden werden konnte. So können Anwendungen unterscheiden, ob ein Kommando nicht gefunden wurde oder ob das Kommando mit einem Fehler beendet wurde. Der Wert 127 wurde deshalb ausgewählt, weil er in der Regel noch nicht für andere Bedeutungen belegt ist. Meistens werden für „normale Fehlerbedingungen“ kleine Werte verwendet. Die Werte über 128 könnten mit einer Beendingung aufgrund des Empfangs eines Signals verwechselt werden. Ähnlich wurde der Wert 126 ausgewählt um anzuzeigen, dass das Kommando zwar gefunden wurde, aber nicht aufgerufen werden konnte. Manche Prozeduren erzeugen aussagekräftige Fehlermeldungen, die zwischen 126 und 127 unterscheiden. Die Unterscheidung zwischen den Rückgabecodes 126 und 127 beruht auf Erfahrungen mit der Korn-Shell, bei der folgendes gilt: 127 wird verwendet, wenn alle Versuche, das Kommando exec auszuführen, mit [ENOENT] fehlschlagen; 126 wird verwendet, wenn ein Versuch, exec auszuführen, aus anderen Gründen fehlschlägt.

Da mit den Optionen -v und -V die Ausgabe für command je nach der aktuellen Shell-Umgebung erzeugt wird, wird command in der Regel als reguläres eingebautes Kommando der Shell zur Verfügung gestellt. Erfolgt der Aufruf in einer Subshell oder einer besonderen Ausführungsumgebung wie zum Beispiel:

(PATH=foo command -v)
nohup command -v

so führt dies nicht in jedem Fall zu korrekten Ergebnissen. So können die meisten Implementationen zum Beispiel in besonderen Ausführungsumgebungen keine Alias-Namen, Funktionen oder spezielle eingebaute Kommandos erkennen, wenn der Aufruf mit der Funktion nohup oder exec erfolgt.

In einem System können zwei Arten regulärer eingebauter Kommandos vorgefunden werden. Beide werden unter command separat beschrieben. Die Beschreibung der Kommandosuche berücksichtigt die Implementation eines Standard-Kommandos als reguläres eingebautes Kommando, solange es an der richtigen Stelle in einer PATH-Suche gelesen wird. So könnte zum Beispiel command -v true den Pfadnamen /bin/true oder einen ähnlichen Pfadnamen zum Ergebnis haben. Andere, implementationsspezifische Kommandos, die nicht in dieser Dokumentation definiert werden, können allenfalls als eingebaute Kommandos vorkommen. Ihnen wird kein Pfadname zugewiesen. Die Ausgabe wird als (reguläre) eingebaute Kommandos gekennzeichnet. Anwendungen können nicht in jedem Fall das Kommando exec ausführen, nohup verwenden, sie mit einem anderen PATH außer Kraft setzen etc.

Internationale Umgebung

Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos command:

LANG

Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden.

LC_ALL

Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen.

LC_CTYPE

Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten).

LC_MESSAGES

Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden.

NLSPATH

Legt den Pfad der Meldungsdateien für LC_MESSAGES fest.

PATH

Legt den bei der Kommandosuche verwendeten Suchpfad fest, außer wenn mit -p ein Standardwert gesetzt wurde.

Beispiel 1

Es wird eine Version von cd erstellt, die das neue aktuelle Dateiverzeichnis genau ein Mal ausgibt:

cd() { 
       command cd "$@" >/dev/null
       pwd
      } 

Beispiel 2

Es wird eine „sichere Shell-Prozedur“ gestartet, bei der die Prozedur nicht vom Vater beeinflusst werden kann:

IFS='
'
#   Der vorstehende Wert sollte <space><tab><newline> sein.
#   IFS wird auf den Standardwert gesetzt.
\unalias -a
#   Alle möglichen Alias-Namen werden zurückgesetzt.
#   unalias wird entwertet, damit kein Alias-Name
#   verwendet wird.
unset -f command
#   Das Kommando darf keine Benutzerfunktion sein.
PATH="$(command -p getconf _CS_PATH):$PATH"
# PATH-Präfix einführen.
#   ...

Unter der Voraussetzung, dass die Zugriffsrechte für die von PATH aufgerufenen Verzeichnisserichtig gesetzt sind, kann die Prozedur an dieser Stelle sicherstellen, dass die aufgerufenen Kommandos auch den Kommandos entsprechen, die angesprochen werden sollten. Dabei wird sehr vorsichtig vorgegangen, weil angenommen wird, dass implementationsspezifische Erweiterungen vorliegen können, die bei Aufruf Benutzerfunktionen zulassen würden. Diese Möglichkeit wird in dieser Dokumentation nicht weiter beschrieben, wird aber als Erweiterung durchaus zugelassen. Zum Beispiel steht die Variable ENV vor dem Aufruf einer Prozedur mit einer benutzereigenen Start-Prozedur. Eine solche Prozedur könnte zum Beispiel Funktionen definieren, die die Anwendung beeinflussen.

Siehe auch

sh, type