Istnieją dwie klasy wbudowanych:
Niektóre polecenia muszą być wbudowane w sam program powłoki, ponieważ nie mogą działać, jeśli są zewnętrzne.
cd
jest jednym z nich, ponieważ gdyby był zewnętrzny, mógłby jedynie zmienić własny katalog; nie może wpłynąć na bieżący katalog roboczy powłoki. (Zobacz także: Dlaczego cd
nie jest programem? )
Druga klasa poleceń jest wbudowana w powłokę wyłącznie w celu zwiększenia wydajności.
Strona człowiek posiada sekcję na builtins który wspomina , i jako przykłady poleceń w tej klasie.dash
printf
echo
test
Systemy uniksowe zawsze zawierały osobne pliki wykonywalne dla poleceń w tej drugiej klasie. Te osobne pliki wykonywalne są nadal dostępne w każdym systemie Unixy, z którego korzystałem, nawet jeśli są wbudowane w każdą powłokę, której prawdopodobnie będziesz używać. ( POSIX faktycznie wymaga obecności tych plików wykonywalnych).
Myślę, że echo
został wbudowany w powłokę w AT&T Unix System V Release 3.1. Opieram to na porównaniu dwóch różnych wydań instrukcji obsługi systemów uniksowych serii AT i Ts 3B1 . Ktoś uprzejmie zeskanował wydania tych podręczników z 1986 r. I umieścił je w Internecie ; odpowiadają one pierwotnemu wydaniu SVR3. Widać, że echo
nie ma go na liście na stronie 523 UNIX System V Podręcznik użytkownika, tom II , gdzie można się spodziewać, gdyby polecenie zostało wbudowane w powłokę. W mojej lokalnej wersji papierowej instrukcji SVR3.1 z 1987 r. Wymieniony echo
jest w tej części instrukcji.
Jestem prawie pewien, że nie jest to innowacja Berkeley CSRG, którą AT&T wróciło do domu. 4.3BSD wyszedł w tym samym roku, co SVR3, 1986, ale jeśli spojrzysz na stronę podręcznika sh.1 4.3BSD , zobaczysz, że echo
nie ma go na liście wbudowanych poleceń sekcji „Polecenia specjalne”. Jeśli CSRG to zrobi, pozostanie nam udokumentowane źródło, które to udowodni.
W tym momencie możesz się zastanawiać, czy echo
został on wbudowany w powłokę wcześniej niż SVR3.1 i czy do tego czasu ten fakt nie został po prostu udokumentowany . Najnowszy dostępny dla mnie kod źródłowy AT&T Unix sprzed SVR3 znajduje się w tarballu PDP-11 System III , w którym znajdziesz kod źródłowy powłoki Bourne'a. Nie znajdziesz echo
wbudowanej tabeli poleceń /usr/src/cmd/sh/msg.c
. Na podstawie sygnatur czasowych w tym pliku dowodzi, że z echo
pewnością nie było go w powłoce w 1980 roku.
Drobnostki
Ten sam katalog zawiera również plik o nazwie, builtin.c
który nie zawiera żadnych informacji na temat tego pytania, ale znajdujemy ten interesujący komentarz:
/*
builtin commands are those that Bourne did not intend
to be part of his shell.
Redirection of i/o, or rather the lack of it, is still a
problem..
*/