el comando sudo no genera /root/.bashrc

Pregunta:

He agregado una ruta personalizada a la variable PATH en mi archivo /root/.bashrc

Cuando hago sudo su; echo $PATH , muestra la entrada, '/ ruta / a / custom / bins'.

Pero hago sudo sh -c 'echo $PATH' , se muestra, /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Las rutas de carpeta agregadas en el archivo .bashrc no son visibles.

¿El comando sudo no tiene el mismo entorno que un usuario root?

Respuesta:

.bashrc es un archivo de configuración de bash, solo cuando se ejecuta de forma interactiva. Solo se carga cuando inicia bash, no cuando ejecuta algún otro programa como sh (ni siquiera si se invoca bash mediante el nombre sh ). Y solo se carga cuando bash es interactivo, no cuando está ejecutando un script o un comando con -c .

sudo sh -c 'echo $PATH' o sudo bash -c 'echo $PATH' no invoca un shell interactivo, por lo que .bashrc no está involucrado.

sudo su; echo $PATH ejecuta una instancia interactiva del shell de root. Si eso es bash, entonces se carga ~root/.bashrc . Este fragmento ejecuta echo $PATH una vez que finaliza este shell interactivo, por lo que lo que suceda en el shell interactivo no influye en lo que imprime el fragmento al final. Pero si escribe echo $PATH en el indicador del shell interactivo iniciado por sudo su , verá el valor establecido por ~root/.bashrc .

Dado que .bashrc se invoca en cada shell interactivo, no mediante shells de inicio de sesión (ni siquiera mediante shells de inicio de sesión interactivos, que es un defecto de diseño en bash), es el lugar equivocado para definir variables de entorno. Utilice .bashrc para configuraciones de bash interactivas como combinaciones de teclas, alias y configuraciones de finalización. Configure las variables de entorno en los archivos que se cargan cuando ~/.pam_environment sesión: ~/.pam_environment o ~/.profile .

Así que configure PATH en .profile en lugar de .bashrc , y ejecute un shell de inicio de sesión con sudo -i 'echo $PATH' , o explícitamente fuente .profile con sudo sh -c '. ~/.profile; echo $PATH' .

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım