
Entro a mi máquina y luego, para ejecutar algunos comandos, sudo bash
primero necesito hacerlo.
En una sesión de terminal interactiva, si hago esto:
[vagrant@33 ~]$ sudo bash
[root@33 vagrant]# which bundle
/opt/upnxt/rbenv-0.4.0-7/shims/bundle
las cosas funcionan. Pero si necesito hacer esto en una línea:
[vagrant@33 ~]$ sudo bash -c "whoami; which bundle"
root
which: no bundle in (/sbin:/bin:/usr/sbin:/usr/bin)
las cosas dejan de funcionar. ¿Por qué sucede esto y qué más debo hacer con el segundo escenario para poder ejecutarlo como el primero?
Respuesta1
Cuando llamas, sudo bash
ejecutas una nueva instancia de bash con user root environment
. Pero si llama sudo bash -c "whoami; which bundle"
al entorno, permanezca como para su usuario. Si no tienes intención de hacerlo puedes modificar última convocatoria por sudo
opciones-i
-i,--acceso
Ejecute el shell especificado por la entrada de la base de datos de contraseñas del usuario de destino como shell de inicio de sesión. Esto significa que los archivos de recursos específicos de inicio de sesión, como.perfilo.accesoserá leído por el shell. Si se especifica un comando, se pasa al shell para su ejecución a través del comando-Copción. Si no se especifica ningún comando, se ejecuta un shell interactivo. sudointenta cambiar al directorio de inicio de ese usuario antes de ejecutar el shell. El comando se ejecuta con un entorno similar al que recibiría un usuario al iniciar sesión.Entorno de comandosección en elsudoers(5) el manual documenta cómo la opción -i afecta el entorno en el que se ejecuta un comando cuando se utiliza la política sudoers.