Co wbudowane polecenie robi w bash?

35

Wiem, co to jest wbudowane polecenie, ale co builtinsamo robi? Wykonanie which lspokazuje mi /bin/ls, ale wykonanie which builtinnic nie zwraca.

man builtin po prostu daje mi listę wbudowanych poleceń, z których jednym jest builtin . Reszta strony podręcznika wyjaśnia, co to jest wbudowane, ale nie to, co builtinjest.

builtin --help mówi mi builtin: usage: builtin [shell-builtin [arg ...]] ale wciąż nie to, co robi.

Czy to część bash w sposób, w jaki inne wbudowane polecenia nie są?

lfalina
źródło
3
Zapomniałeś help builtin.
Ignacio Vazquez-Abrams,
3
which builtinnie zwraca wyników, ponieważ whichzgłasza lokalizację poleceń zewnętrznych . Jeśli poprosisz o powłokę type builtin, nie będzie to zaskakujące builtin is a shell builtin. Znajdziesz to samo z alias, setitp.
Toby Speight
1
builtin help builtin
theonlygusti

Odpowiedzi:

50

The builtin marki dowodzenia pewno uruchomić powłokę wbudowany w wersji polecenia zamiast prowadzenia innego polecenia o tej samej nazwie.

Załóżmy na przykład, że zdefiniowałeś funkcję powłoki o nazwie, cdktóra wypisuje dodatkowy status za każdym razem, gdy zmieniasz katalogi. Ale popsułeś to i teraz nie możesz poprawnie zmieniać katalogów. Teraz możesz pisać, builtin cd ~aby pomyślnie wrócić do katalogu domowego bez uruchamiania uszkodzonej funkcji powłoki.

Nawiasem mówiąc, moja kopia strony podręcznika użytkownika bash ma sekcję o nazwie „SHELL BUILTIN COMMANDS” i definiuje znaczenie builtinpolecenia w tej sekcji (transkrypcji poniżej).

wbudowana wbudowana powłoka [argumenty]

    Uruchom określoną wbudowaną powłokę, przekazując jej argumenty i
    zwraca swój status wyjścia. Jest to przydatne podczas definiowania funkcji
    którego nazwa jest taka sama jak wbudowana powłoka, zachowując
    funkcjonalność wbudowanej funkcji. Wbudowana płyta CD to
    powszechnie redefiniowane w ten sposób.

    Status zwracany jest false, jeśli wbudowana powłoka nie jest wbudowana w powłokę
    dowództwo.
Spiff
źródło
14
niezła odpowiedź. Ale zastanawiam się, skąd możesz mieć pewność, że to builtinpolecenie jest wbudowane w bash?
Pacopaco,
14
@Pacopaco: Nie możesz :-). Państwo może przesłonić builtinteż: function builtin { echo "Hi from builtin :-)"; }. Wtedy builtinjuż nie działa.
śleske,
12
@Pacopaco, type builtinpowie ci, czy to prawda builtin. Chyba typeże został zastąpiony niewbudowanym type...
Toby Speight
10
och ... niestety można: alias unset = "echo unset jest nadpisane"; alias alias = "echo alias jest przesłonięty" ... Więc nie ma tu szczęścia.
Olivier Dulac,
8
Uwielbiam tę trwającą dyskusję!
Sam Weaver,