.bash_profile no se obtiene al ejecutar su

41

Tengo un usuario, por ejemplo user1, que tiene modificaciones a su .bash_profile, uno de ellos el cambio de la PATH, por ejemplo: export PATH=/some/place:$PATH. Este cambio funciona bien si inicio sesión como user1o hago un su - user1.

Pero si trato de ejecutar un comando a través de sucomo root, por ejemplo:

su -c test.sh oracle

(prueba contiene echo $PATH)

No parece tener el modificado PATH(o la raíz PATH, para el caso). También he intentado copiar .bash_profilea .profile, en vano.

¿Por qué está pasando esto?

Usuario nulo
fuente
use --login cambie asu
Nikhil Mulley el
1
FYI: buena redacción en los archivos de configuración de bash hacktux.com/bash/bashrc/bash_profile
Nikhil Mulley el

Respuestas:

60

Usar susin -lo -comienza bashcomo un shell interactivo, pero sin inicio de sesión, que no lee ninguno de los archivos que especificó. Utilice el -lo -la opción o poner la configuración relevante en /root/.bashrc.

Resumen rápido de archivos de configuración:

  • Login shell ( -l/ --login) es el /etc/profileprimero, y luego el primero que encuentra de: ~/.bash_profile, ~/.bash_login, y ~/.profile.
  • El shell interactivo (pero sin inicio de sesión -i) lee /etc/bash.bashrcy ~/.bashrc, en ese orden (a menos que se use la --rcfileopción y le indique que busque en otro lado).
  • Los shells no interactivos, por ejemplo, iniciados desde otro programa sin usar las banderas -lo -i, leen el archivo especificado en la BASH_ENVvariable de entorno.
  • Cuando se ejecuta como shun shell de inicio de sesión, se leerá /etc/profiley ~/.profile, en ese orden.
  • Cuando se ejecuta como shun no inicio de sesión interactivo, lee el archivo especificado en ENV.
Kevin
fuente
5

Bash se comporta de manera diferente dependiendo de si cree que es un shell de inicio de sesión, es decir, el primer shell que se ejecuta cuando inicia sesión en un sistema. Solo se lee .bash_profilesi es un shell de inicio de sesión. Si coloca el PATHcódigo de .bashrccambio en su lugar, se ejecutará para todos los shells de bash interactivos, no solo para los shells de inicio de sesión.

Kyle Jones
fuente
0

Si usa el entorno Gnome en Scientific Linux 6 (o presumiblemente RHEL 6), inicie un terminal. Vaya a Edit-> Profile Preferences-> "Title and Command"pestaña. Asegúrese de que la casilla de verificación "Ejecutar comando como un shell de inicio de sesión" esté marcada. Descubrí que la aplicación de terminal Gnome está ignorando mi a .bash_profilemenos que haga esto.

Andrés
fuente