Hay dos clases de incorporados:
Algunos comandos tienen que estar integrados en el programa shell porque no pueden funcionar si son externos.
cd
es uno de estos, ya que si fuera externo, solo podría cambiar su propio directorio; No podría afectar el directorio de trabajo actual del shell. (Ver también: ¿Por qué cd
no es un programa? )
La otra clase de comandos está integrada en el shell únicamente por eficiencia.
La página de manual contiene una sección sobre órdenes internas que menciona , y como ejemplos de comandos en esta clase.dash
printf
echo
test
Los sistemas Unix siempre han incluido ejecutables separados para comandos en esa segunda clase. Estos ejecutables separados todavía están disponibles en todos los sistemas Unixy que he usado, a pesar de que también están integrados en cada shell que es probable que use. ( POSIX realmente requiere que estos ejecutables estén presentes).
Creo que echo
se incorporó al shell en AT&T Unix System V Release 3.1. Lo baso en comparaciones de dos ediciones diferentes de manuales para sistemas Unix de la serie AT & Ts 3B1 . Alguien ha escaneado amablemente las ediciones de 1986 de estos manuales y los ha puesto en línea ; estos corresponden al lanzamiento original de SVR3. Puede ver que echo
no está en la lista en la página 523 del Manual del usuario de UNIX System V, Volumen II , donde lo esperaría si el comando se integrara en el shell. En mi copia local en papel de los manuales SVR3.1 de 1987, echo
se enumera en esta sección del manual.
Estoy bastante seguro de que esta no es una innovación de Berkeley CSRG que AT&T trajo a casa. 4.3BSD salió el mismo año que SVR3, 1986, pero si mira la página de manual sh.1 de 4.3BSD , verá que echo
no está en la lista de comandos incorporados de la sección "Comandos especiales". Si CSRG hizo esto, eso nos deja queriendo una fuente documentada para probarlo.
En este punto, puede preguntarse si echo
se construyó en el shell antes de SVR3.1 y que este hecho simplemente no se documentó hasta entonces. El código fuente de AT&T Unix anterior a SVR3 más nuevo disponible para mí está en el tarball PDP-11 System III , en el que encontrará el código fuente de shell Bourne. No lo encontrará echo
en la tabla de comandos integrada, que está en /usr/src/cmd/sh/msg.c
. Según las marcas de tiempo en ese archivo, eso prueba que echo
ciertamente no estaba en el shell en 1980.
Trivialidades
El mismo directorio también contiene un archivo llamado builtin.c
que no contiene nada sobre el punto para esta pregunta, pero encontramos este comentario interesante:
/*
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..
*/