command ist der POSIX-Standard zur Befehlsauflösung — verfügbar in jeder POSIX-konformen Shell, von Bash und Zsh über Dash bis Ash. Mit command -v prüfst du portabel, ob ein Programm existiert; ohne Optionen umgeht command Aliases und Funktionen und ruft direkt das Builtin oder die Datei. Genau diese zwei Fähigkeiten machen es unverzichtbar für robuste Skripte.

command -v — die portable Verfügbarkeitsprüfung

command -v name gibt aus, was die Shell beim Aufruf von name ausführen würde — bei Aliases den Alias-Text, bei Funktionen den Funktionsnamen, bei Dateien den Pfad. Der Exit-Code ist 0 bei Erfolg und ungleich null, wenn der Befehl unbekannt ist.

Bash command -v Beispiel
command -v jq
command -v ls
Output
/usr/bin/jq
alias ls='ls --color=auto'

Weil command zu POSIX gehört, funktioniert dasselbe Skript in Bash, Dash, Zsh und Ash gleich — anders als type, das Bash-spezifisch ist, oder which, das je nach Distro variiert.

Best Practice: Existenzprüfung in Skripten

In Skripten ist command -v der idiomatische Weg, um zu prüfen, ob ein Programm verfügbar ist:

Bash Verfügbarkeitsprüfung
if command -v jq >/dev/null 2>&1; then
    echo "jq ist installiert"
else
    echo "jq fehlt - bitte installieren" >&2
    exit 1
fi

Das Pattern ist so verbreitet, dass es als Quasi-Standard gilt. Wichtig sind die zwei Umleitungen: >/dev/null unterdrückt die Standardausgabe, 2>&1 zusätzlich Fehlermeldungen — sodass nur der Exit-Code zählt.

command ohne -v — Aliases und Funktionen umgehen

Eine zweite, oft übersehene Rolle: command name ruft den Befehl name auf und überspringt dabei Aliases und Funktionen. Builtins und PATH-Treffer werden weiterhin verwendet.

Bash Alias umgehen
alias rm='rm -i'
rm datei.txt          # fragt nach
command rm datei.txt  # löscht ohne Rückfrage

Praktisch in Skripten oder Funktionen, in denen du dich nicht auf die Aliases der interaktiven Shell verlassen willst. Wer den PATH-Lookup wirklich erzwingen muss, kombiniert es mit -p: command -p rm nutzt einen sicheren System-PATH.

command -V — der ausführliche Bruder

Mit großem -V bekommst du eine menschenlesbare Beschreibung, vergleichbar mit type -a:

Bash command -V
command -V ls
command -V cd
Output
ls is aliased to `ls --color=auto'
cd is a shell builtin

Das gemischte Quoting im Alias-Output (öffnender Backtick `, schließendes Single-Quote ') ist Absicht und stammt aus dem GNU-Quoting-Stil — kein Tippfehler von Bash, sondern ein Überbleibsel aus Pre-Unicode-Zeiten, als die beiden Zeichen wie typografische Anführungszeichen aussahen.

Für Skripte ist -v (klein) die richtige Wahl, weil die Ausgabe kompakt und maschinell verwertbar ist. -V ist eher zum Nachschauen gedacht.

Besonderheiten

command ist POSIX, type ist Bash

command -v funktioniert in jeder POSIX-konformen Shell — Dash, Ash, Bash, Zsh, Ksh. type ist ein Bash-Builtin und in #!/bin/sh-Skripten (das in vielen Distros auf Dash zeigt) nicht zuverlässig. Wer portable Skripte schreibt, nimmt command -v.

command umgeht Aliases auch in Funktionen

Innerhalb einer Shell-Funktion namens ls willst du oft das echte ls aufrufen, nicht dich selbst rekursiv. command ls macht genau das: überspringt Aliases und Funktionen, ruft aber Builtins und Datei-Befehle weiterhin auf. Das ist die saubere Lösung gegen Endlos-Rekursionen in Wrapper-Funktionen.

command -p nutzt einen sicheren System-PATH

command -p name ignoriert dein $PATH und nutzt eine vom System definierte sichere Liste (typischerweise /usr/bin:/bin). Praktisch in Skripten, die robust gegen manipulierte Umgebungen sein sollen — oder wenn du sicher gehen willst, dass rm auch wirklich /bin/rm ist und nicht ein Trojaner aus ~/bin.

Klein -v für Skripte, groß -V zum Anschauen

command -v liefert kompakte, maschinenlesbare Ausgabe und ist in Prüfungen überall im Einsatz. command -V ist verbose, gibt ganze Sätze aus und ist eher das interaktive Pendant zu type -a. In Skripten nimmt man -v, am Prompt vorzugsweise gleich type.

Weiterführende Ressourcen

Externe Quellen

/ Weiter

Zurück zu Dateisystem

Zur Übersicht