.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 a través del nombre sh
). Y solo se carga cuando bash es interactivo, no cuando ejecuta un script o un comando con-c
.
sudo sh -c 'echo $PATH'
o sudo bash -c 'echo $PATH'
no invoca un shell interactivo, entonces.bashrc
lo que no está involucrado.
sudo su; echo $PATH
ejecuta una instancia interactiva del shell de root. Si eso es bash, entonces ~root/.bashrc
se carga. Este fragmento se ejecuta echo $PATH
una vez que este shell interactivo finaliza, por lo que lo que suceda en el shell interactivo no tiene influencia sobre 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 por shells de inicio de sesión (ni siquiera por shells de inicio de sesión interactivo, que es un defecto de diseño en bash), es el lugar incorrecto para definir variables de entorno. Úselo .bashrc
para configuraciones de bash interactivas, tales como combinaciones de teclas, alias y configuraciones de finalización. Establezca variables de entorno en los archivos que se cargan al iniciar sesión: ~/.pam_environment
o~/.profile
.
Así que establece PATH
en .profile
lugar de .bashrc
, y, o bien ejecutar una shell de entrada con sudo -i 'echo $PATH'
, o fuente explícitamente .profile
con sudo sh -c '. ~/.profile; echo $PATH'
.