Me encontré con un comando de Linux, builtin cd.
¿Cuál es la diferencia entre los comandos builtin cdy cd?
De hecho, hice algunas investigaciones sobre la diferencia, pero no pude encontrar una explicación notable y significativa sobre esto.
bash
shell
cd-command
Goktug
fuente
fuente

Respuestas:
El
cdcomando está integrado, por lo que normalmentebuiltin cdhará lo mismo quecd. Pero hay una diferencia sicdse redefine como una función o un alias, en cuyo casocdllamará a la función / alias perobuiltin cdaún cambiará el directorio (en otras palabras, mantendrá el acceso incorporado incluso si está bloqueado por una función).Por ejemplo:
O con un alias:
El uso
builtintambién es una buena manera de definir unacdfunción que hace algo y cambia el directorio (ya que llamarcddesde él simplemente seguiría llamando a la función nuevamente en una recursión sin fin).Por ejemplo:
fuente
builtin cd mysubdiry\cd mysubdir?cd, en cuyo caso\cdomitiría el alias y ejecutaría la función. Ver stackoverflow.com/a/16506263/4518341En la mayoría de los casos, no hay diferencia (pero ver más abajo). El
cdcomando es un comando incorporado en todos los shells. Debe estar integrado en 1 ya que un comando externo no puede cambiar el entorno del shell de invocación, y cambiar el directorio de trabajo constituye un cambio en su entorno.El
bashcomandobuiltinobliga al shell a utilizar la versión integrada de un comando, aunque puede haber una función de shell, un alias o un comando externo disponible con el mismo nombre.En el caso donde no está por ejemplo una función de shell con el nombre
cd, entoncesbuiltin cdsería no llamar a ese. El usobuiltin cdevita cualquier funcionalidad sobrecargada que el usuario haya agregado mediante una función de shell o un alias.Ejemplo:
El
cdcomando incorporado puede estar sobrecargado por una función que actualiza la solicitud:donde
__update_prompthay alguna otra función proporcionada por el usuario que genera una cadena.El
builtin cden la función no llamaría a la función recursivamente. El usobuiltin cden un shell donde esta función está activa, adicionalmente, no llamaría a la función.1 Hay Unices con un
cdcomando externo (macOS y, creo, Solaris). El propósito de ese comando, que no puede cambiar el directorio de trabajo de un shell, es posiblemente satisfacer el estándar POSIX, que se enumeracdcomo una de las utilidades externas que deberían estar disponibles (cdno es una de las "utilidades incorporadas especiales") . También puede servir como prueba para ver si sería posible cambiar el directorio de trabajo a un directorio dado .fuente
cdcomando externo .