.bashrces 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 $PATHejecuta una instancia interactiva del shell de root. Si eso es bash, entonces ~root/.bashrcse carga. Este fragmento se ejecuta echo $PATHuna 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 $PATHen el indicador del shell interactivo iniciado por sudo su, verá el valor establecido por ~root/.bashrc.
Dado que .bashrcse 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 .bashrcpara 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_environmento~/.profile .
Así que establece PATH en .profilelugar de .bashrc, y, o bien ejecutar una shell de entrada con sudo -i 'echo $PATH', o fuente explícitamente .profilecon sudo sh -c '. ~/.profile; echo $PATH'.