Il y a deux classes de commandes intégrées:
Certaines commandes doivent être intégrées au programme shell lui-même car elles ne peuvent pas fonctionner si elles sont externes.
cd
Il en est un puisque, s'il était externe, il ne pourrait changer que de son propre répertoire. cela ne pourrait pas affecter le répertoire de travail actuel du shell. (Voir aussi: Pourquoi n'est cd
pas un programme? )
L'autre classe de commandes est intégrée au shell uniquement pour des raisons d'efficacité.
La page de manuel a une section sur builtins qui mentionne , et comme exemples de commandes dans cette classe.dash
printf
echo
test
Les systèmes Unix ont toujours inclus des exécutables distincts pour les commandes de cette seconde classe. Ces exécutables distincts sont toujours disponibles sur tous les systèmes Unixy que j'ai utilisés, même s'ils sont également intégrés à chaque shell que vous êtes susceptible d'utiliser. ( POSIX exige en fait que ces exécutables soient présents.)
Je crois avoir echo
été intégré à la coquille dans AT & T Unix System V version 3.1. Je me base sur des comparaisons de deux éditions différentes de manuels pour les systèmes Unix de la série AT & Ts 3B1 . Quelqu'un a gracieusement numérisé les éditions de 1986 de ces manuels et les a mis en ligne ; ceux-ci correspondent à la version originale de SVR3. Vous pouvez voir que cela echo
ne figure pas dans la liste à la page 523 du Manuel de l'utilisateur d' UNIX System V, volume II , à laquelle vous vous attendriez si la commande était intégrée au shell. Dans mon journal local copie des manuels de SVR3.1 de 1987, echo
est répertorié dans cette section du manuel.
Je suis à peu près sûr que ce n'est pas une innovation CSRG de Berkeley qu'AT & T a rapportée à la maison. 4.3BSD est sorti la même année que SVR3, 1986, mais si vous consultez la page de manuel sh.1 de 4.3BSD , vous voyez que cela echo
ne figure pas dans la liste des commandes intégrées de la section "Commandes spéciales". Si CSRG agissait ainsi, cela nous laisserait vouloir une source documentée pour le prouver.
À ce stade, vous vous demandez peut-être si echo
le shell avait été construit avant SVR3.1 et si ce fait n’avait tout simplement pas été documenté jusque-là. Le dernier code source AT & T Unix pré-SVR3 dont je dispose se trouve dans l’ archive PDP-11 System III , dans laquelle vous trouverez le code source du shell Bourne. Vous ne trouverez pas echo
dans la table de commande intégrée, qui se trouve dans /usr/src/cmd/sh/msg.c
. D'après les horodatages de ce fichier, cela prouve que ce echo
n'était certainement pas dans la coquille en 1980.
Trivia
Le même répertoire contient également un fichier appelé builtin.c
qui ne contient rien sur cette question, mais nous trouvons ce commentaire intéressant:
/*
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..
*/