I napotkał polecenie Linux builtin cd
.
Jaka jest różnica między poleceniami builtin cd
a cd
?
W rzeczywistości przeprowadziłem kilka badań dotyczących różnicy, ale nie mogłem znaleźć niezwykłego i znaczącego wyjaśnienia na ten temat.
bash
shell
cd-command
Goktug
źródło
źródło
Odpowiedzi:
cd
Komenda jest wbudowany, więc zazwyczajbuiltin cd
zrobi to samo cocd
. Istnieje jednak różnica, jeślicd
zostanie ona ponownie zdefiniowana jako funkcja lub alias, w którym to przypadkucd
wywoła funkcję / alias, alebuiltin cd
nadal zmieni katalog (innymi słowy, zachowa dostęp do wbudowanej funkcji, nawet jeśli zostanie zablokowana przez funkcję).Na przykład:
Lub z aliasem:
Użycie
builtin
jest również dobrym sposobem na zdefiniowaniecd
funkcji, która coś robi i zmienia katalog (ponieważ wywołaniecd
z niej po prostu wywoływałoby funkcję ponownie w nieskończonej rekurencji).Na przykład:
źródło
builtin cd mysubdir
i\cd mysubdir
?cd
, w takim przypadku pominie\cd
alias i uruchomi funkcję. Zobacz stackoverflow.com/a/16506263/4518341W większości przypadków nie ma różnicy (ale patrz poniżej).
cd
Polecenie jest wbudowane polecenie we wszystkich muszli. Musi być wbudowany 1, ponieważ zewnętrzne polecenie nie może zmienić środowiska powłoki wywołującej, a zmiana katalogu roboczego stanowi zmianę w jego środowisku.Na
bash
poleceniebuiltin
siły powłoka użyć wbudowanego w wersji polecenia, choć może istnieć funkcja powłoki, alias lub komenda zewnętrzna dostępna z tej samej nazwie.W przypadku tam gdzie jest np funkcję powłoki z nazwą
cd
, tobuiltin cd
byłoby nie nazwać. Użyciebuiltin cd
pomija wszelkie przeciążone funkcje, które użytkownik mógł dodać za pomocą funkcji powłoki lub aliasu.Przykład:
cd
Wbudowanego polecenia mogą być przeciążone przez funkcję, która zaktualizuje komunikat:gdzie
__update_prompt
jest inna funkcja dostarczona przez użytkownika, która generuje ciąg znaków.Funkcja
builtin cd
in nie wywołałaby funkcji rekurencyjnie. Użyciebuiltin cd
w powłoce, w której ta funkcja jest aktywna, dodatkowo nie wywołałoby tej funkcji.1 Są Unices z zewnętrznym
cd
poleceniem (macOS i, jak sądzę, Solaris). Celem tego polecenia, które nie może zmienić katalogu roboczego powłoki, jest prawdopodobnie spełnienie standardu POSIX, który wymieniacd
jako jedno z zewnętrznych narzędzi, które powinny być dostępne (cd
nie jest to jeden z „specjalnych wbudowanych narzędzi”) . Może również służyć jako test sprawdzający, czy możliwa jest zmiana katalogu roboczego na dany katalog .źródło
cd
poleceniem.