Ich bin auf einen Linux - Befehl gestoßen builtin cd
.
Was ist der Unterschied zwischen den Befehlen builtin cd
und cd
?
Tatsächlich habe ich einige Nachforschungen über den Unterschied angestellt, aber ich konnte keine bemerkenswerte und signifikante Erklärung dafür finden.
bash
shell
cd-command
Goktug
quelle
quelle
Antworten:
Der
cd
Befehl ist ein eingebauter Befehl, der normalerweisebuiltin cd
das Gleiche tut wiecd
. Es gibt jedoch einen Unterschied, obcd
als Funktion oder als Alias neu definiert wird. In diesem Fallcd
wird die Funktion / der Alias aufgerufenbuiltin cd
, das Verzeichnis wird jedoch weiterhin geändert.Beispielsweise:
Oder mit einem Alias:
Das Verwenden von
builtin
ist auch eine gute Möglichkeit, einecd
Funktion zu definieren , die etwas ausführt und das Verzeichnis ändert (da ein Aufrufcd
von ihr die Funktion in einer endlosen Rekursion immer wieder aufrufen würde).Beispielsweise:
quelle
builtin cd mysubdir
und\cd mysubdir
?cd
, wird in diesem Fall\cd
der Alias umgangen und die Funktion ausgeführt. Siehe stackoverflow.com/a/16506263/4518341In 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
Befehlbuiltin
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
, dannbuiltin cd
würde nicht so nennen. Durchbuiltin 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: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 Verwendungbuiltin 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, dercd
als eines der externen Dienstprogramme aufgeführt ist, die verfügbar sein sollten (escd
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 .quelle
cd
Befehl in die Kategorie der Betriebssysteme fallen .