cd
En plus d'être un shell intégré, c'est aussi un programme sur les systèmes d'exploitation compatibles POSIX. Ils doivent fournir des exécutables indépendants pour les utilitaires habituels, tels que cd
. Ceci est par exemple le cas avec Solaris , AIX , HP-UX et OS X .
De toute évidence, une commande intégrée cd
est toujours obligatoire car son implémentation externe ne modifie pas le répertoire shell en cours. Cependant, ce dernier peut toujours être utile. Voici un exemple montrant comment POSIX envisage l'utilisation de cette cd
commande:
find . -type d -exec cd {} \;
Sur un système POSIX, cet oneliner signalera un message d'erreur pour tous les répertoires non autorisés cd
. Sur la plupart des distributions Gnu / Linux, le message d'erreur suivant s'affiche:
find: `cd': No such file or directory
Et voici la réponse à votre question, " Pourquoi le CD n'est-il pas un programme? " De l'un des co-auteurs Unix d'origine. Sur une version très tôt Unix, cd
(orthographié chdir
à cette époque) était un programme externe. Il a simplement cessé de fonctionner de manière inattendue après fork
sa première mise en œuvre.
Citant Dennis Ritchie :
Au beau milieu de notre jubilation, il a été découvert que la commande chdir (changer le répertoire en cours) avait cessé de fonctionner. Il y avait beaucoup de lecture de code et d'introspection anxieuse sur la manière dont l'ajout de fork aurait pu rompre l'appel de chdir. Finalement, la vérité se fit jour: dans l'ancien système, chdir était un ordre ordinaire; il a ajusté le répertoire en cours du processus (unique) associé au terminal. Sous le nouveau système, la commande chdir a correctement modifié le répertoire en cours du processus créé pour l'exécuter, mais ce processus s'est rapidement terminé et n'a eu aucun effet sur son shell parent! Il était nécessaire de faire de chdir une commande spéciale, exécutée en interne dans le shell. Il se trouve que plusieurs fonctions analogues à des commandes ont la même propriété, par exemple login.
Source: Dennis M. Ritchie, « L’évolution du système de partage du temps Unix », Revue technique des laboratoires AT & T Bell 63 (6), Partie 2, octobre 1984, p. 1577–93.
Unix Version 1 (Mars 1971) La page de manuel chdir indique:
Comme un nouveau processus est créé pour exécuter chaque commande, chdir serait inefficace s’il était écrit en tant que commande normale. Il est donc reconnu et exécuté par Shell.