Esistono due classi di builtin:
Alcuni comandi devono essere integrati nel programma shell stesso perché non possono funzionare se sono esterni.
cdè uno di questi poiché, se fosse esterno, potrebbe solo cambiare la propria directory; non ha potuto influenzare l'attuale directory di lavoro della shell. (Vedi anche: Perché cdnon è un programma? )
L'altra classe di comandi è integrata nella shell esclusivamente per motivi di efficienza.
La pagina man ha una sezione comandi incorporati che cita , e come esempi di comandi in questa classe.dash printfechotest
I sistemi Unix hanno sempre incluso eseguibili separati per i comandi in quella seconda classe. Questi eseguibili separati sono ancora disponibili su tutti i sistemi Unixy che ho usato, anche se sono anche integrati in ogni shell che probabilmente utilizzerai. ( POSIX richiede effettivamente la presenza di questi eseguibili.)
Credo che sia echostato integrato nella shell in AT&T Unix System V Release 3.1. Baso questo sul confronto di due diverse edizioni di manuali per sistemi Unix serie AT & Ts 3B1 . Qualcuno ha gentilmente scannerizzato le edizioni del 1986 di questi manuali e li ha messi online ; questi corrispondono alla versione originale di SVR3. Puoi vedere che echonon è nell'elenco a pagina 523 del Manuale dell'utente di UNIX System V, Volume II , dove ti aspetteresti se il comando fosse incorporato nella shell. Nella mia copia cartacea locale dei manuali SVR3.1 del 1987, echo è elencato in questa sezione del manuale.
Sono abbastanza sicuro che questa non sia un'innovazione Berkeley CSRG che AT&T ha riportato a casa. 4.3BSD è uscito lo stesso anno di SVR3, 1986, ma se si guarda la manpage sh.1 di 4.3BSD , si vede che echonon si trova nell'elenco dei comandi integrati nella sezione "Comandi speciali". Se CSRG ha fatto questo, questo ci lascia desiderare una fonte documentata per dimostrarlo.
A questo punto, potresti echochiederti se è stato incorporato nella shell prima di SVR3.1 e che questo fatto semplicemente non è stato documentato fino ad allora. Il più recente codice sorgente Unix AT&T pre-SVR3 disponibile per me è nel tarball PDP-11 System III , dove troverai il codice sorgente della shell Bourne. Non troverai echonella tabella dei comandi incorporata, che è in /usr/src/cmd/sh/msg.c. Basato sui timestamp in quel file, ciò dimostra che echocertamente non era nella shell nel 1980.
banalità
La stessa directory contiene anche un file chiamato builtin.cche non contiene nulla di preciso per questa domanda, ma troviamo questo interessante commento:
/*
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..
*/