Aqui está a motivação para a pergunta:
Estou usando o Ubuntu 12.04 LTS 2 com a área de trabalho do Unity. No meu arquivo .bashrc, anexo vários diretórios à minha variável PATH e defino algumas variáveis de ambiente, como JAVA_HOME. Quando inicio aplicativos a partir de um terminal (executando bash, meu shell padrão), isso funciona muito bem, mas para vários dos atalhos que usam o iniciador do Unity, eles executam aplicativos que parecem definidos para usar #! / Bin / sh, que é um alias para / bin / dash e eles não capturam o conteúdo de ~ / .bashrc ou ~ / .profile.
Suponho que eu poderia alterar todos esses atalhos para usar / bin / bash em vez de / bin / sh para forçá-lo a pegar as alterações .bashrc, mas isso parece realmente hacky.
Dado que o Ubuntu 12.04 (por padrão) aliases / bin / sh para / bin / dash e que meu shell padrão é / bin / bash, existe um único local onde eu posso escolher modificar o PATH e definir variáveis de ambiente, se eu quiser estar presente em todas essas circunstâncias:
- Sempre que eu crio um shell bash sem login (usando o terminal em unidade)
- Sempre que eu crio um shell bash de login (por exemplo, efetuando login remotamente pelo ssh)
- Sempre que uso um iniciador de aplicativos Unity (dado que o iniciador usa / bin / sh).
- Sempre que um trabalho cron é executado (considerando que SHELL = / bin / sh em / etc / crontab).
Se entendi direito, acho que:
- (1) / (2) e (3) / (4) são diferentes porque (1) / (2) são bash e (3) / (4) são hífen.
- (1) e (2) são diferentes porque os arquivos que o bash escolhe carregar diferem dependendo se é ou não um shell de login.
- (3) e (4) são diferentes porque (3) chegará em algum momento após o login (e, portanto, ~ / .profile será originado por um de seus processos pai, enquanto (4) ocorrerá em algum momento ponto em que estou não logado, e, portanto, ~ / .profile não foram lidas.
(Eu não ficaria surpreso se outros fatores também importassem, como se o shell é ou não interativo, então provavelmente há mais combinações que eu nem imaginava ... Estou feliz por ter minha pergunta "melhorada " nesse caso.)
Eu esperaria que, em algum momento, alguém devesse ter feito algum tipo de guia que informa como / onde modificar variáveis de ambiente de maneira independente do shell (ou pelo menos de uma maneira compatível com dash / bash) ... Eu simplesmente posso ' parece que não encontrou os termos de pesquisa corretos para localizar esse guia.
Soluções ou indicadores para soluções muito apreciadas!
Atualizada:
- Esclarecimento: Este é o usuário padrão do Ubuntu criado pelo processo de instalação da 12.04, portanto, nada de especial. Ele não tem um ~ / .profile (que explicitamente fontes ~ / .bashrc), ea única ~ / .bash * arquivos presentes são .bashrc, .bash_history e .bash_logout ... por isso não há nenhuma .bash_profile.
- Ênfase no escopo: eu realmente não me importo com outros shells que não sejam o shell interativo padrão (bash) e qualquer script que use / bin / sh (alias ao dash); portanto, não há necessidade de complicar isso com algo extra para tcsh / ksh / zsh / etc. Apoio, suporte.