¿Por qué no funciona "sudo cd"?

Respuestas:

56

cdEs una concha incorporada. sudosolo 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.

Dennis Williamson
fuente
2
¿Pero entonces sudo pwdtampoco funcionaría? (Siempre pensé que sudo cd lo hace el trabajo, pero simplemente no está viendo el resultado después de sudodevoluciones. Pero eso era sólo una suposición. Tal vez ni cdtampoco pwden 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.)
Arjan
2
@Arjan: pwdtambién es un ejecutable externo, por lo que funcionará. Tenga en cuenta que en algunos sistemas, hay un cdejecutable, pero en su mayoría es inútil. Intente usarlo type -a cdes mucho más informativo que which, por cierto.
Dennis Williamson
2
¡Agradable! type -a cdmuestra ambos cd is a shell builtiny cd is /usr/bin/cden mi Mac. Y asimismo para pwdy echo. Y ambos sudo pwdy sudo echo "Hello world"sí me dan un resultado. Sin embargo, type -a returnsolo cede return is a shell builtin, y sudo return 3me 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 cdtrabajo sin ningún error? (O: qué sistema operativo está usando el OP.)
Arjan
sudo sh -c 'cd dirname'no hace nada por mi
Peter Niederwieser
1
@Arjan Encontré la explicación: es algo así como un hack de compatibilidad profunda. No cumple su función, pero se debe a los efectos secundarios que tiene el verdadero cd. Y no puede hacer nada en lugar de fallar cuando el shell actual no tiene un cdcomando. 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 cdcomando externo?
Volker Siegel
72

En su lugar, intente usar sudo -spara iniciar un shell raíz y luego simplemente cden 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!

oKtosiTe
fuente
44
Pero: tenga cuidado, una vez que uno es root ...
Arjan
7

Simplemente puede suconvertirse en root y luego cdtodo 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.

Alex
fuente
Por otro lado, si no hay una contraseña de root, o si no la conoce, sudo es la única opción.
Liam
0

Hay dos formas en que "no funcionará", dependiendo de su sistema operativo:

  1. Si su sistema operativo sigue a POSIX, la ejecución sudo cdhará 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 cdejecuta sin error, pero no cambia el directorio de trabajo actual de su shell actual.

    (referencia: esta respuesta )

  2. De lo contrario, la ejecución sudo cdhará 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 cdcorre con error.

mareoraft
fuente