Me encontré con un comando de Linux, builtin cd
.
¿Cuál es la diferencia entre los comandos builtin cd
y 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
cd
comando está integrado, por lo que normalmentebuiltin cd
hará lo mismo quecd
. Pero hay una diferencia sicd
se redefine como una función o un alias, en cuyo casocd
llamará a la función / alias perobuiltin cd
aú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
builtin
también es una buena manera de definir unacd
función que hace algo y cambia el directorio (ya que llamarcd
desde él simplemente seguiría llamando a la función nuevamente en una recursión sin fin).Por ejemplo:
fuente
builtin cd mysubdir
y\cd mysubdir
?cd
, en cuyo caso\cd
omitirí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
cd
comando 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
bash
comandobuiltin
obliga 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 cd
sería no llamar a ese. El usobuiltin cd
evita cualquier funcionalidad sobrecargada que el usuario haya agregado mediante una función de shell o un alias.Ejemplo:
El
cd
comando incorporado puede estar sobrecargado por una función que actualiza la solicitud:donde
__update_prompt
hay alguna otra función proporcionada por el usuario que genera una cadena.El
builtin cd
en la función no llamaría a la función recursivamente. El usobuiltin cd
en un shell donde esta función está activa, adicionalmente, no llamaría a la función.1 Hay Unices con un
cd
comando 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 enumeracd
como una de las utilidades externas que deberían estar disponibles (cd
no 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
cd
comando externo .