Linux (RedHat) 'sudo su -l user_acct' não origina perfil

2

Como afirmado, tendo problemas ao carregar o perfil padrão de <<user_acct>> ao fazer sudo su -l <<user_acct>> .

Dentro de .profile ,

if [ -r "${HOME}/.profile.custom" ]; then
    . "${HOME}/.profile.custom"
fi

Pelo que eu li (por exemplo, respostas semelhantes a esta um ), -l deveria ter acionado um shell de login e, portanto, originado .profile , mas não parece estar funcionando porque as variáveis de ambiente definidas em .profile.custom não estão lá (vs. se eu apenas corri . .profile , eles aparecem.

Pergunta revisada : Quaisquer reflexões sobre por que ou como resolver esse problema ?

Atualizar Eu encontrei uma solução para o meu problema depois de tudo ... Acontece que era bastante trivial - basta definir as variáveis de ambiente em .bash_profile e elas estão definidas.

De acordo com a página bash man, conforme discutido aqui ,

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

.. a chave está no primeiro que existe.

Lição aprendida: leia a impressão "fina"

    
por user1766760 29.03.2013 / 17:37

2 respostas

2

Quando é um shell de login, o bash primeiro procura por ~/.bash_profile . Se não encontrar, procura ~/.bash_login . Se não encontrar, procura ~/.profile . Em qualquer caso, mesmo que o shell de login seja interativo, o bash não lê ~/.bashrc .

Eu recomendo manter o seguinte conteúdo em ~/.bash_profile e não ter um ~/.bash_login :

if [ -e ~/.profile ]; then . ~/.profile; fi
case $- in *i*) if [ -e ~/.bashrc ]; then . ~/.bashrc; fi;; esac

Dessa forma, seu .profile é carregado, se o seu shell de login é bash ou alguma outra variante sh, e seu .bashrc é carregado por bash, se o shell é um shell de login ou não.

    
por 30.03.2013 / 01:00
2

Não faça sudo su , isso não é necessário. sudo -i -u loginname é o que você quer.

    
por 29.03.2013 / 18:29