Existem duas classes de builtins:
Alguns comandos precisam ser incorporados ao próprio programa shell porque não podem funcionar se forem externos.
cd
é um desses, pois, se fosse externo, só poderia alterar seu próprio diretório; não poderia afetar o diretório de trabalho atual do shell. (Veja também: Por que cd
não é um programa? )
A outra classe de comandos é incorporada ao shell apenas para eficiência.
A página do homem tem uma seção sobre builtins que menciona , e como exemplos de comandos nesta classe.dash
printf
echo
test
Os sistemas Unix sempre incluíram executáveis separados para comandos nessa segunda classe. Esses executáveis separados ainda estão disponíveis em todos os sistemas Unixy que eu usei, embora também estejam embutidos em todos os shell que você provavelmente usará. (O POSIX realmente exige que esses executáveis estejam presentes.)
Acredito que echo
foi incorporado ao shell no AT&T Unix System V Release 3.1. Baseei isso nas comparações de duas edições diferentes de manuais para os sistemas Unix da série AT & Ts 3B1 . Alguém digitalizou gentilmente as edições de 1986 desses manuais e as colocou online ; estes correspondem à versão original do SVR3. Você pode ver que isso echo
não está na lista na página 523 do Manual do Usuário do UNIX System V, Volume II , onde você esperaria se o comando fosse incorporado ao shell. Na minha cópia em papel local dos manuais SVR3.1 de 1987, echo
está listada nesta seção do manual.
Tenho certeza de que essa não é uma inovação de Berkeley CSRG que a AT&T trouxe de volta para casa. O 4.3BSD saiu no mesmo ano que o SVR3, 1986, mas se você olhar a página de manual sh.1 do 4.3BSD , verá que echo
não está na lista de comandos internos da seção "Comandos Especiais". Se o CSRG fez isso, isso nos deixa querendo uma fonte documentada para provar isso.
Nesse ponto, você pode se perguntar se echo
foi incorporado ao shell antes do SVR3.1 e que esse fato simplesmente não foi documentado até então. O mais novo código-fonte pré-SVR3 AT&T Unix disponível para mim está no pacote PDP-11 System III , em que você encontrará o código-fonte do shell Bourne. Você não vai encontrar echo
na tabela de comando interno, que está em /usr/src/cmd/sh/msg.c
. Com base nos registros de data e hora desse arquivo, isso prova que echo
certamente não estava no shell em 1980.
Curiosidades
O mesmo diretório também contém um arquivo chamado builtin.c
que não contém nada específico para esta pergunta, mas achamos este comentário interessante:
/*
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..
*/