Respostas:
Não é chamado bash_profile
, mas o local padrão para a configuração global do bash é /etc/bash.bashrc
. É comum chamar isso de /etc/profile
se o shell for bash. Por exemplo, no meu /etc/profile
eu tenho:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1=’0
if [ ‐f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
fi
fi
Em termos de uso, /etc/profile
fornece configuração em todo o sistema para todos os shells compatíveis com Bourne (sh, bash, ksh, etc.). Normalmente, não há necessidade de um equivalente /etc/bash_profile
, porque a intenção do arquivo de perfil é controlar o comportamento dos shells de login. Normalmente, qualquer coisa que você queira fazer não será específica do bash. /etc/bash.bashrc
é específico do bash e será executado para os shells de login e não-login.
Para complicar ainda mais as coisas, parece que o OS X nem sequer tem um /etc/bash.bashrc
. Provavelmente, isso está relacionado ao fato de que os Terminais no OS X assumem o padrão de execução como shells de logon , de modo que a distinção se perde:
Uma exceção às diretrizes da janela de terminal é o Terminal.app do Mac OS X, que executa um shell de login por padrão para cada nova janela de terminal, chamando .bash_profile em vez de .bashrc. Outros emuladores de terminal da GUI podem fazer o mesmo, mas a maioria costuma não fazer.
Eu não executo o OS X, então a extensão do meu conhecimento termina aí.
/etc/profile
no Ubuntu 12.04. O que você sugeriria se alguém quisesse um /etc/profile
que fosse executado apenas sob o bash e nenhum outro shell compatível com sh?
/etc/profile
de arquivos para o meu sistema contém um comentário no topo que diz: # System-wide .profile for sh(1)
. Isso significa que profile
é sh
específico? De sh
alguma forma corre antes bash
?
sh
é um subconjunto de bash
. /etc/profile
é executado para sh
, bash
e todos os outros shells compatíveis com Bourne.
/etc/bashrc
no mac, não /etc/bash.bashrc
. Também parece funcionar /bin/sh
também.
/etc/profile
é o global bash_profile
. Não há nenhum arquivo específico para o bash, o bash apenas lê o arquivo padrão lido por todos os shell no estilo Bourne. É aí que você pode definir variáveis de ambiente para todo o sistema.
Consulte Existe um arquivo equivalente ".bashrc" lido por todos os shells? para uma visão geral genérica dos arquivos de inicialização comuns do bash.
Como o carregamento não é carregado /etc/profile
, nada /etc/profile.d/
é carregado (ao contrário dos shells de login, veja o final).
O arquivo global para isso é / etc / bashrc ou /etc/bash.bashrc (dependendo do -DSYS_BASHRC=
sinalizador definido no tempo de compilação):
# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
return
fi
PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
Normalmente, é uma boa ideia deixar esse arquivo como está (o máximo possível) para evitar conflitos. A estratégia que eu uso é semelhante à que os shells de login (/ etc / profile) usam.
Minha estratégia é anexar um carregador ao arquivo acima:
# Add new directory analog to /etc/profile.d
mkdir /etc/bashrc.d
# Write the loader to /etc/bash.bashrc (it might be /etc/bashrc on as mentioned above)
cat >> /etc/bash.bashrc << 'EOF'
# I appended this: Load scripts from /etc/bashrc.d
if test -d /etc/bashrc.d; then
for script in /etc/bashrc.d/*.sh; do
test -r "$script" && . "$script"
done
unset item
fi
EOF
Agora eu posso adicionar facilmente n personalizações ao arquivo de shell interativo global (bash) colocando novos arquivos .sh no diretório /etc/bashrc.d.
/etc/bashrc.d/grep.sh
alias grep='grep --color=auto'
Você pode fazer isso com este recurso:
printf "alias grep=\'grep --color=auto\'" > /etc/bashrc.d/grep.sh
Se, depois de ler isso, você não estiver convencido, faça isso para se convencer:
printf "alias grep=\'grep --color=auto\'" > /etc/profile.d/grep.sh
Abra um novo emulador de terminal e procure por alguma palavra comum em seu diretório de usuário como "the" usando grep
grep -r 'the'
Nada deve ser colorido. Faça o mesmo em um console virtual executando CTRLALTF1 (lembre-se de que seu servidor X provavelmente está sendo executado em CTRLALTF7 para que você possa voltar. Se você esquecer, basta reiniciar o gerenciador de desktop, por exemplo)
grep -r 'the'
produzirá resultados coloridos conforme desejado.
Nada deve ser colorido. Faça o mesmo em um console virtual CTRLALTF1(lembre-se de que seu servidor X provavelmente está sendo executado CTRLALTF7para que você possa voltar. Se você esquecer, basta reiniciar o gerenciador de desktop, por exemplo).
grep -r 'the'
produzirá resultados coloridos conforme desejado.
Um shell de logon é o que você obtém ao inicializar uma máquina ou alternar entre os consoles virtuais por CTRLALTF1meio do FNthconsole virtual.
Um Shell de Login é carregado /etc/profile
enquanto carrega /etc/profile.d/*.sh
arquivos.
/etc/bash.bashrc
partir de um shell não interativo./etc/profile
pode ser lido por shell não interativo. Veja a diferença entre o Shell de login e o Shell que não é de login?