Quiero ejecutar un comando en un shell en nombre de otro usuario. El comando es el siguiente:
sudo -u USER cd /home/USER
yo obtengo
sudo: cd: command not found
¿Cuál es la sintaxis correcta para pasar el comando a sudo?
Respuesta1
cd
es unshell incorporado. Necesita invocar el shell para ejecutar las funciones integradas del shell:
sudo -u USER sh -c 'cd /home/USER'
O
sudo -u USER bash -c 'cd /home/USER'
Respuesta2
cd
no es un comando externo, es solo un shell integrado, por lo que sudo
no puede ejecutarlo. La razón por la que cd
sólo existe como un shell incorporado es que un proceso no puede afectar el directorio actual de otro proceso; por lo tanto, un programa que cambia el directorio actual y sale inmediatamente es inútil. (Casi inútil: un cd
programa devolvería un estado que indica si tuvo éxito).
Si desea cambiar a un directorio y luego ejecutar comandos como otro usuario, ejecute un shell que haga todo eso.
sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'
Respuesta3
Tiendo a usar: sudo su - USERNAME
y luego hacer lo que necesites como ese usuario. Para salir simplemente escribeexit