.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'.
.profile? ¿Quieres decir/root/.profileo/home/user/.profile? Traté de agregarexport PATH=$PATH:/mydira ambos. No funcionó Lo intenté sinexporteso tampoco funcionó.Mira el
-Ey-iopciones .-E: Indica a la política de seguridad que el usuario desea preservar sus variables de entorno existentes. La política de seguridad puede devolver un error si el usuario no tiene permiso para preservar el entorno.-i: Ejecute el shell especificado por la entrada de la base de datos de contraseñas del usuario objetivo como un shell de inicio de sesión. Esto significa que el shell leerá los archivos de recursos específicos de inicio de sesión como .profile o .login. Si se especifica un comando, se pasa al shell para su ejecución a través de la opción -c del shell. Si no se especifica ningún comando, se ejecuta un shell interactivo. sudo intenta 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. La sección Entorno del comando en el manual de sudoers (5) documenta cómo la opción -i afecta el entorno en el que se ejecuta un comando cuando la política de sudoers es en uso.fuente
Podría hacerlo
sudo bash, lo que sí lee losbasharchivos de inicio como se documenta en labashpágina del manual / documentación. Sin embargo, tenga en cuenta que es posible que no establezca laHOMEvariable de entorno correctamente. Esto se puede solucionar en elbasharchivo de inicio de todo el sistema (en/etc, la ubicación exacta depende de la distribución): pruebe si$uides 0.fuente