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ą?


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.

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.