¿Por qué escribir sudo cd lo que no cambiará el directorio?
¿Por qué escribir sudo cd lo que no cambiará el directorio?
Respuestas:
cd
Es una concha incorporada. sudo
solo funciona con ejecutables. Podría hacerlo, sudo sh -c 'cd dirname'
pero tan pronto como el shell salga, volverá al directorio desde el que comenzó. Si dices qué es lo que estás tratando de lograr, entonces puedo ayudarte a encontrar una manera de hacerlo.
sudo pwd
tampoco funcionaría? (Siempre pensé que sudo cd
lo hace el trabajo, pero simplemente no está viendo el resultado después de sudo
devoluciones. Pero eso era sólo una suposición. Tal vez ni cd
tampoco pwd
en realidad son incorporados en Bash en un Mac. Correr which cd
no de hecho me dan resultados. Correr sudo cd /
no me da un error, pero de hecho no da como resultado un cambio en el directorio de trabajo.)
pwd
también es un ejecutable externo, por lo que funcionará. Tenga en cuenta que en algunos sistemas, hay un cd
ejecutable, pero en su mayoría es inútil. Intente usarlo type -a cd
es mucho más informativo que which
, por cierto.
type -a cd
muestra ambos cd is a shell builtin
y cd is /usr/bin/cd
en mi Mac. Y asimismo para pwd
y echo
. Y ambos sudo pwd
y sudo echo "Hello world"
sí me dan un resultado. Sin embargo, type -a return
solo cede return is a shell builtin
, y sudo return 3
me muestra sudo: return: command not found
. Entonces, supongo que la pregunta es: ¿el OP recibe un mensaje de error o el OP no ve el cd
trabajo sin ningún error? (O: qué sistema operativo está usando el OP.)
sudo sh -c 'cd dirname'
no hace nada por mi
cd
. Y no puede hacer nada en lugar de fallar cuando el shell actual no tiene un cd
comando. Cualquier caparazón que los humanos puedan usar alguna vez cd
, incluido /bin/sh
. Pero un programa que es, visto desde el núcleo del sistema operativo, un shell puede ser mucho más simple que eso, incluso solo un par de líneas de código. Consulte ¿Cuál es el punto del cd
comando externo?
En su lugar, intente usar sudo -s
para iniciar un shell raíz y luego simplemente cd
en el directorio.
Cuando haya terminado como root, presione CtrlDo escriba exit
.
Como Arjan insinúa en su comentario a continuación, es importante tener en cuenta que, como root, uno puede dañar fácilmente los componentes esenciales del sistema. Úselo con cuidado!
Simplemente puede su
convertirse en root y luego cd
todo lo que quiera ... Sé que una respuesta ya ha sido aceptada, pero si una no está en la lista de sudoers, entonces esta es la única opción.
Hay dos formas en que "no funcionará", dependiendo de su sistema operativo:
Si su sistema operativo sigue a POSIX, la ejecución sudo cd
hará que el comando externo "cd" (generalmente ubicado en /usr/bin/cd
) se ejecute en un proceso bifurcado como usuario root. Ese proceso cambia los directorios con éxito. Una vez que se realiza ese proceso, volverá a su shell normal, que todavía está en el directorio donde comenzó.
Entonces se sudo cd
ejecuta sin error, pero no cambia el directorio de trabajo actual de su shell actual.
(referencia: esta respuesta )
De lo contrario, la ejecución sudo cd
hará que suceda lo siguiente. Su computadora buscará a través de su RUTA, tratando de encontrar un ejecutable llamado "cd". No encontrará uno. (solo existe el comando de shell incorporado "cd", y ese no es un archivo ejecutable). Por lo tanto, obtienes un error. (En Ubuntu, recibo el mensaje de error sudo: cd: command not found
).
Entonces sudo cd
corre con error.