Por que o root não usa o .bash_profile?

8

Sempre que tento logar como root usando su (não su - ), ele não origina .bash_profile no diretório pessoal do usuário.

Basicamente, meu diretório /var/root não tem .bash_profile , então eu coloquei uma cópia de .bash_profile em /var/root para testar su - .

Ele também não fornece automaticamente .bash_profile (em var/root ).

De qualquer forma, quero que .bash_profile , de user1, seja originado automaticamente na conta root quando eu usar su .

O que devo fazer?

(Funcionou antes! Um dia, simplesmente não aparece! Talvez algo tenha mudado as configurações no bash? Funciona quando eu digito source .bash_profile após o login.)

Estou usando o Mac e o OS X Yosemite.

    
por sirion 09.04.2015 / 11:31

3 respostas

11

O shell padrão para root no OS X é /bin/sh . Seu sh também é uma versão de bash , mas quando invocado com o nome sh Bash :

tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well.

When invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first attempts to read and execute commands from /etc/profile and ~/.profile, in that order. ... a shell invoked as sh does not attempt to read and execute commands from any other startup files

Ou seja, ele não lê .bash_profile , , independentemente de ter sido chamado como um shell de login ou não . Você pode usar .profile , ou até mesmo ligar um para o outro. Se você iniciar um shell de login com su -l , .profile será carregado na inicialização, mas .bash_profile nunca será.

Você também pode usar dscl para alterar o shell do root (observando que /etc/passwd é não usado para determinar o shell no OS X). Você pode verificar o shell atual do root com dscl . -read /Users/root UserShell ; consulte a documentação e pense cuidadosamente antes de alterá-la para outra coisa.

Outra abordagem é simplesmente alterar sua invocação de su para forçar a execução de bash imediatamente.

Dado o que você disse, eu provavelmente recomendaria o symlink, mas você pode querer examinar as mudanças que o Bash's modo POSIX faz e decide se você quer tê-los ou não.

    
por 09.04.2015 / 11:54
5

Porque não é considerado como um "shell de login" (que é invocado diretamente de login , ou sshd ), mas simples "shell interativo". Veja aqui, por exemplo: link

Portanto, force su usando a opção de login, ou seja, com -l option:

su -l

Ou coloque seu ambiente no arquivo .bashrc .

    
por 09.04.2015 / 11:45
3

O usuário root tentará executar o arquivo .bashrc em vez do .bash_profile, já que você não está invocando um shell de login.

Do manual bash man bash :

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

Observe o ~ onde o arquivo .bashrc precisa estar no diretório-raiz do usuário root.

Para responder a sua pergunta, se você quiser que o arquivo .bashrc do user1 seja usado, sugiro que você faça um link (simbólico) entre o source .bashrc de user1 para o usuário root.

Você também pode considerar a origem do user1 .bashrc ou mesmo do .bash_profile adicionando a linha . /homedirectory/of/user1/.bash_profile ao arquivo .bashrc do usuário root.

    
por 09.04.2015 / 11:50

Tags