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é cd
non è 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
printf
echo
test
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 echo
stato 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 echo
non è 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 echo
non 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 echo
chiederti 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 echo
nella tabella dei comandi incorporata, che è in /usr/src/cmd/sh/msg.c
. Basato sui timestamp in quel file, ciò dimostra che echo
certamente non era nella shell nel 1980.
banalità
La stessa directory contiene anche un file chiamato builtin.c
che 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..
*/