Dans la plupart des cas, il n'y a pas de différence (mais voir ci-dessous). La cd
commande est une commande intégrée dans tous les shells. Il doit être intégré 1 car une commande externe ne peut pas changer l'environnement du shell appelant, et changer le répertoire de travail constitue un changement dans son environnement.
La bash
commande builtin
force le shell à utiliser la version intégrée d'une commande, même si une fonction shell, un alias ou une commande externe peut être disponible avec le même nom.
Dans le cas où il est par exemple une fonction shell avec le nom cd
, puis builtin cd
ne pas appeler. L'utilisation builtin cd
contourne toute fonctionnalité surchargée qui peut avoir été ajoutée via une fonction shell ou un alias par l'utilisateur.
Exemple:
La cd
commande intégrée peut être surchargée par une fonction qui met à jour l'invite:
cd() {
builtin cd "$@" && PS1=$(__update_prompt)
}
où __update_prompt
est une autre fonction fournie par l'utilisateur qui génère une chaîne.
Le builtin cd
dans la fonction n'appellerait pas la fonction récursivement. L'utilisation builtin cd
dans un shell où cette fonction est active, n'appellerait en outre pas la fonction.
1 Il existe des Unices avec une cd
commande externe (macOS et, je crois, Solaris). Le but de cette commande, qui ne peut pas changer le répertoire de travail d'un shell, est peut-être de satisfaire la norme POSIX, qui répertorie cd
comme l'un des utilitaires externes qui devraient être disponibles ( cd
n'est pas l'un des "utilitaires intégrés spéciaux") . Il peut également servir de test pour voir si la modification du répertoire de travail en un répertoire donné serait possible .