.bash_profile não originado ao executar o su

31

Eu tenho um usuário, digamos user1 , que tem modificações no seu .bash_profile , uma delas alterando o PATH , por exemplo: export PATH=/some/place:$PATH . Esta alteração funciona bem se eu fizer logon como user1 ou fizer um su - user1 .

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

su -c test.sh oracle

(teste contém echo $PATH )

Parece não ter o PATH modificado (ou PATH da raiz). Eu também tentei copiar .bash_profile para .profile , sem sucesso.

Por que isso está acontecendo?

    
por NullUser 23.01.2012 / 17:59

3 respostas

46

Usando su sem -l ou - começa bash como um shell interativo, mas sem logon, que não lê nenhum dos arquivos especificados. Use a opção -l ou - ou coloque a configuração relevante em /root/.bashrc .

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

  • O shell de login ( -l / --login ) lê /etc/profile primeiro e, em seguida, o primeiro que encontra em: ~/.bash_profile , ~/.bash_login e ~/.profile .
  • O shell interativo, mas sem logon ( -i ) lê /etc/bash.bashrc e ~/.bashrc , nessa ordem (a menos que a opção --rcfile seja usada e diz para procurar em outro lugar).
  • Conchas não interativas, por exemplo iniciado a partir de outro programa sem usar os sinalizadores -l ou -i , lê o arquivo especificado na variável de ambiente BASH_ENV .
  • Quando executado como sh como um shell de login, ele lerá /etc/profile e ~/.profile , nessa ordem.
  • Quando executado como sh como um não-login interativo, ele lê o arquivo especificado em ENV .
por 23.01.2012 / 19:41
5

O Bash se comporta de maneira diferente, dependendo se ele acredita que é um shell de login, ou seja, a primeira execução do shell quando você faz logon em um sistema. Apenas lê .bash_profile se for um shell de login. Se você colocar o código PATH -changing em .bashrc , ele será executado para todos os shells interativos do bash, não apenas para os shells de login.

    
por 23.01.2012 / 19:37
0

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

    
por 12.07.2014 / 00:35