.bash_profile não originado ao executar su

41

Eu tenho um usuário, por exemplo user1, que tem modificações ao seu .bash_profile, um deles mudando a PATH, por exemplo: export PATH=/some/place:$PATH. Essa alteração funciona bem se eu fizer logon como user1ou a su - user1.

Mas se eu tentar executar um comando via sucomo root, por exemplo:

su -c test.sh oracle

(teste contém echo $PATH)

Não parece ter o modificado PATH(ou raiz PATH, para esse assunto). Eu também tentei copiar .bash_profilepara .profile, sem sucesso.

Por que isso está acontecendo?

NullUser
fonte
use --login switch parasu
Nikhil Mulley
11
FYI - bom writeup em arquivos de configuração do bash hacktux.com/bash/bashrc/bash_profile
Nikhil Mulley

Respostas:

60

Usar susem -lou -iniciar bashcomo um shell interativo, mas não de login, que não é lido em nenhum dos arquivos especificados. Use o -lou -opção ou colocar a configuração relevante para /root/.bashrc.

Resumo rápido dos arquivos de configuração:

  • Acesso de shell ( -l/ --login) lê /etc/profileprimeiro, e então o primeiro que encontra por: ~/.bash_profile, ~/.bash_login, e ~/.profile.
  • O shell interativo, mas sem login ( -i), lê /etc/bash.bashrce ~/.bashrc, nessa ordem (a menos que a --rcfileopção seja usada e diz para procurar em outro lugar).
  • Os shells não interativos, por exemplo, iniciados em outro programa sem usar os sinalizadores -lou -i, lê o arquivo especificado na BASH_ENVvariável de ambiente.
  • Quando executado como shum shell de login, ele será lido /etc/profilee ~/.profile, nessa ordem.
  • Quando executado como shum não logon interativo, ele lê o arquivo especificado em ENV.
Kevin
fonte
5

O Bash se comporta de maneira diferente dependendo se acredita que é um shell de logon, ou seja, o primeiro shell executado quando você faz logon no sistema. Ele apenas lê .bash_profilese é um shell de login. Se você PATHinserir o código -changing .bashrc, ele será executado para todos os shells bash interativos, não apenas shells de login.

Kyle Jones
fonte
0

Se estiver usando o ambiente Gnome no Scientific Linux 6 (ou presumivelmente no RHEL 6), inicie um terminal. Vá para Edit-> Profile Preferences-> "Title and Command"guia. Verifique se a caixa de seleção "Executar comando como um shell de login" está marcada. Eu descobri que o aplicativo de terminal do Gnome está ignorando o meu, a .bash_profilemenos que eu faça isso.

Andrew
fonte