In den meisten Fällen gibt es keinen Unterschied (siehe unten). Der cd
Befehl ist in allen Shells integriert. Es muss 1 integriert sein, da ein externer Befehl die Umgebung der aufrufenden Shell nicht ändern kann und das Ändern des Arbeitsverzeichnisses eine Änderung in ihrer Umgebung darstellt.
Der bash
Befehl builtin
erzwingt, dass die Shell die integrierte Version eines Befehls verwendet, obwohl möglicherweise eine Shell-Funktion, ein Alias oder ein externer Befehl mit demselben Namen verfügbar sind.
In dem Fall , in dem es wird eine Shell - Funktion mit dem Namen zB cd
, dann builtin cd
würde nicht so nennen. Durch builtin cd
die Verwendung von Bypasses werden überladene Funktionen umgangen, die der Benutzer möglicherweise über eine Shell-Funktion oder einen Alias hinzugefügt hat.
Beispiel:
Der cd
eingebaute Befehl kann durch eine Funktion überladen werden, die die Eingabeaufforderung aktualisiert:
cd() {
builtin cd "$@" && PS1=$(__update_prompt)
}
Wobei __update_prompt
es sich um eine andere vom Benutzer bereitgestellte Funktion handelt, die eine Zeichenfolge ausgibt.
Die builtin cd
in der Funktion würde die Funktion nicht rekursiv aufrufen. Die Verwendung builtin cd
in einer Shell, in der diese Funktion aktiv ist, würde die Funktion zusätzlich nicht aufrufen.
1 Es gibt Unices mit externem cd
Befehl (macOS und, glaube ich, Solaris). Der Zweck dieses Befehls, der das Arbeitsverzeichnis für eine Shell nicht ändern kann , besteht möglicherweise darin, den POSIX-Standard zu erfüllen, der cd
als eines der externen Dienstprogramme aufgeführt ist, die verfügbar sein sollten (es cd
handelt sich nicht um eines der "speziell eingebauten Dienstprogramme"). . Es kann auch als Test dienen, um festzustellen, ob das Ändern des Arbeitsverzeichnisses in ein bestimmtes Verzeichnis möglich ist .