Entiendo que
sudo cd /directory
volverá:
sudo: cd: command not found
porque cd es un shell incorporado y no un binario. Pero entonces, ¿por qué
sudo echo 'this is a test'
¿funciona bien?
¿Qué está pasando aquí realmente? ¿Cómo sudo
encuentra el comando echo
si no es un shell?
Respuesta1
La razón es simple, cd
es un shell incorporado (y una función de shell en algunos shells), mientras que echo
es tanto un binario como un shell incorporado:
$ type -a cd
cd is a shell builtin
$ type -a echo
echo is a shell builtin
echo is /bin/echo
sudo
No puede manejar componentes integrados de shell, pero puede manejar archivos binarios en el archivo $PATH
. Cuando usa sudo echo
, /bin/echo
se encuentra en $PATH
, por lo que lo usa, mientras tanto, sudo cd
no puede encontrarlo, cd
por $PATH
lo tanto, falla.
Respuesta2
correr
which echo
da
/bin/echo
echo
es un programa sencillo y sudo
puede "encontrarlo".
Como nota al margen, debe haber alguna opción ensudoers(5)
Respuesta3
El problema es más que sudo cd
su sistema operativo falle que sudo echo
que tenga éxito.
sudo cd /directory
es un método bastante legítimo para comprobar si un usuario determinado, probablemente root
aquí, tiene permiso para cd
acceder a algún directorio. Ésa es la razón por la que todos los sistemas operativos compatibles con PosixhacerProporcionar una versión ejecutable de cd
.
Entonces, la respuesta a su pregunta es que sudo echo yo
funciona por diseño porque echo
la proporciona un alias de shell y un comando ejecutable, pero sudo cd /directory
no funciona porque su sistema operativo, probablemente basado en Gnu/Linux, no funciona.el estándar Posixen este caso específico.
Una solución sencilla para su sistema sería ejecutarsudo sh -c "cd /directory"