Je rencontrais une commande Linux, builtin cd
.
Quelle est la différence entre les commandes builtin cd
et cd
?
En fait, j'ai fait quelques recherches sur la différence, mais je n'ai pas pu trouver d'explication remarquable et significative à ce sujet.
bash
shell
cd-command
Goktug
la source
la source
Réponses:
La
cd
commande est intégrée, donc normalementbuiltin cd
fera la même chose quecd
. Mais il y a une différence s'ilcd
est redéfini en tant que fonction ou alias, auquel cascd
il appellera la fonction / alias maisbuiltin cd
changera toujours le répertoire (en d'autres termes, gardera le intégré accessible même s'il est encombré par une fonction.)Par exemple:
Ou avec un alias:
L'utilisation
builtin
est également un bon moyen de définir unecd
fonction qui fait quelque chose et change de répertoire (car l'appel àcd
partir de celle-ci ne ferait que rappeler la fonction dans une récursion sans fin.)Par exemple:
la source
builtin cd mysubdir
et\cd mysubdir
?cd
, auquel cas\cd
elle contournerait l'alias et exécuterait la fonction. Voir stackoverflow.com/a/16506263/4518341Dans 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
commandebuiltin
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
, puisbuiltin cd
ne pas appeler. L'utilisationbuiltin 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: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'utilisationbuiltin 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épertoriecd
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 .la source
cd
commande externe .