Sei que existem /etc/profile
e /etc/bashrc
arquivos para definir variáveis de ambiente global e talvez eu só estou mal-entendido seus propósitos, mas ...
Existe um bash_profile
arquivo global ?
Estou usando o Mac OS X
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/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?/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 queprofile
ésh
específico? Desh
alguma forma corre antesbash
?sh
é um subconjunto debash
./etc/profile
é executado parash
,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 globalbash_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.
fonte
Configurar shell interativo (Bash) globalmente
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):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:
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.
Colorir globalmente o Grep
/etc/bashrc.d/grep.sh
Você pode fazer isso com este recurso:
Compare profile.d vs bashrc.d
Se, depois de ler isso, você não estiver convencido, faça isso para se convencer:
Abra um novo emulador de terminal e procure por alguma palavra comum em seu diretório de usuário como "the" usando grep
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)
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).
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.fonte