In den meisten Fällen gibt es keinen Unterschied (siehe unten). Der cdBefehl 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 bashBefehl builtinerzwingt, 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 cdwürde nicht so nennen. Durch builtin cddie Verwendung von Bypasses werden überladene Funktionen umgangen, die der Benutzer möglicherweise über eine Shell-Funktion oder einen Alias hinzugefügt hat.
Beispiel:
Der cdeingebaute Befehl kann durch eine Funktion überladen werden, die die Eingabeaufforderung aktualisiert:
cd() {
builtin cd "$@" && PS1=$(__update_prompt)
}
Wobei __update_promptes sich um eine andere vom Benutzer bereitgestellte Funktion handelt, die eine Zeichenfolge ausgibt.
Die builtin cdin der Funktion würde die Funktion nicht rekursiv aufrufen. Die Verwendung builtin cdin einer Shell, in der diese Funktion aktiv ist, würde die Funktion zusätzlich nicht aufrufen.
1 Es gibt Unices mit externem cdBefehl (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 cdals eines der externen Dienstprogramme aufgeführt ist, die verfügbar sein sollten (es cdhandelt 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 .