Por que o root não origina .bash_profile?

10

Toda vez que tento fazer login como root usando su(não su -), ele não é .bash_profileoriginado no diretório inicial do usuário1.

Basicamente, meu /var/rootdiretório não tem .bash_profile, então eu coloquei uma cópia do .bash_profilein /var/rootpara testar su -.

Também não gera .bash_profile(in var/root) automaticamente .

De qualquer forma, quero criar .bash_profile, do usuário1, uma fonte na conta raiz automaticamente quando eu uso su.

O que devo fazer?

(Funcionou antes! Um dia, simplesmente não é fonte! Talvez algo tenha alterado as configurações no bash? Funciona quando entro source .bash_profileapós o login.)

Estou usando o Mac e OS X Yosemite.

sirion
fonte

Respostas:

11

O shell padrão para rootno OS X é /bin/sh. Sua shtambém uma versão de bash, mas quando chamado com o nome shBash :

tenta imitar o comportamento de inicialização de versões históricas o shmais próximo possível, além de estar em conformidade com o padrão POSIX.

Quando invocado como um shell de login interativo ou como um shell não interativo com a --loginopção, ele primeiro tenta ler e executar comandos de /etc/profilee ~/.profilenessa ordem. ... um shell chamado sh não tenta ler e executar comandos de outros arquivos de inicialização

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


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

Outra abordagem é simplesmente alterar sua suchamada para forçar a execução bashimediata.

Dado o que você disse, eu provavelmente recomendaria o link simbólico, mas você pode examinar as alterações feitas pelo modo POSIX do Bash e decidir se deseja tê-las ou não.

Michael Homer
fonte
5

Porque não é considerado um "shell de login" (invocado diretamente de login, ou sshd), mas um simples "shell interativo". Veja aqui por exemplo: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

Então force a suopção de login, ou seja, com a -lopção:

su -l

Ou coloque seu ambiente em um .bashrcarquivo.

myaut
fonte
5

O usuário root tentará executar o arquivo .bashrc em vez do .bash_profile, pois você não está chamando um shell de logon.

No manual do bash man bash:

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

Observe ~onde o arquivo .bashrc precisa estar no diretório doméstico do usuário raiz.

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

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

Lambert
fonte