Este é o conteúdo do estoque ~/.profile
que acompanha o meu 13.10 (linhas comentadas removidas):
if [ -n "$BASH_VERSION" ]; then
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Isso é herdado do Debian, mas por que a Canonical decidiu mantê-lo? Até onde eu sei, não é o caminho padrão * nix e vi vários sistemas em que isso não aconteceu, então presumo que eles devam ter um bom motivo. Isso pode causar um comportamento inesperado ao executar shells de logon (como, por exemplo, quando sshing na máquina, por exemplo), em que o usuário não esperaria ter ~/.bashrc
origem.
O único benefício que consigo pensar é em não confundir o usuário com muitos arquivos de inicialização e permitir que ele edite .bashrc
sozinho e faça a leitura independentemente do tipo de shell. Isso, no entanto, é um benefício duvidoso, pois geralmente é útil ter configurações diferentes para login e shells interativos, o que impede você de fazê-lo. Além disso, os shells de login geralmente não são executados em um ambiente gráfico e isso pode causar erros, avisos e problemas (oh meu!), Dependendo do que você definiu nesses arquivos.
Então, por que o Ubuntu faz isso, o que estou perdendo?
-n "$BASH_VERSION"
seria verdade fora do bash?.profile
source.bashrc
, esse não é o caso em todas as versões do Linux, e estou me perguntando qual é a lógica por trás disso.Respostas:
Esta é uma decisão upstream vinda do Debian. A justificativa para isso é explicada neste post wiki muito agradável , do qual o seguinte é um trecho. O resumo executivo é "para garantir que os logins da GUI e não da GUI funcionem da mesma maneira":
fonte
Esse é o comportamento padrão do Ubuntu,
~/.bashrc
é o arquivo de inicialização por shell interativo no nível do usuário. Quando você abre um terminal, basicamente inicia um shell interativo sem login, que lê~/.bashrc
e o conteúdo~/.bashrc
é obtido e exportado para o ambiente atual do shell. Isso ajuda a obter todas as variáveis e funções de shell definidas pelo usuário no shell atual. Além disso, você pode encontrar linhas como estapara obter aliases definidos pelo usuário no ambiente de shell atual.
Isso é importante para fornecer também uma boa experiência do usuário. Por exemplo, pode armazenar na credencial de proxy
.bashrc
, a menos que se nenhum dos aplicativos de terminal de origem ( ou seja ,ping
,wget
,curl
,lynx
etc.) irá funcionar corretamente. Ou você precisa fornecer as credenciais de proxy sempre que abrir um terminal.Além do padrão do Ubuntu
.bashrc
conter muitos apelidos amigáveis ao usuário (parals
egrep
imprimir saída colorida), muitas novas definições para diferentes variáveis de shell, o que aumenta a experiência do usuário.Mas, no caso de seu login ssh ou login no console virtual , você basicamente obtém um shell de login interativo. Aí está o arquivo de iniciação do shell
~/.profile
. Portanto, a menos que~/.bashrc
você obtenha a fonte, perde todas essas configurações úteis no seu.bashrc
. É por isso que a~/.profile
fonte padrão do Ubuntu~/.bashrc
Caso a evitar
~/.profile
formulário dentro dele~/.bashrc
ao mesmo tempo em que~/.bashrc
está sendo originado~/.profile
. Isso criará um loop infinito de situação e, como resultado, o prompt do terminal será suspenso, a menos que você pressione Ctrl+ C. Em tal situação, se você colocar uma linha no seu~/.bashrc
Então você pode ver que o descritor de arquivo está parando quando você abre um terminal.
fonte
.profile
sourcing.bashrc
? O SuSe Enterprise 10 não faz isso, nem nenhuma das versões do Fedora que usei, mas há alguns anos atrás, posso estar errado. CentOS 5.8 faz estranhamente o suficiente. Enfim, você entende o meu ponto? Esta é uma escolha de design e estou me perguntando por que foi feita..bashrc
ou dentro.bash_aliases
. Por exemplo, eu tenho um pseudônimo parals
comols --color=auto
no meu.bashrc
e.bashrc
obtive o meu.profile
. Aqui eu posso usar o alias mesmo do ssh. Ou eu poderia usar proxy na sessão ssh. Se eu não fonte meu.bashrc
de.profile
eu perder esses recursos. Eu acho que é tudo sobre uma melhor experiência do usuário..bashrc
corrige isso. Mas isso também causa problemas. Lembro-me da primeira vez em que usei um sistema com esse comportamento. Recebi essas mensagens estranhas aossh
usá-lo, porque estava usandoxset b off
no meu.bashrc
que desabilitava a campainha do terminal, mas apenas em um sistema X, para que estava dando mensagens de erro. Levei anos para descobrir o que estava acontecendo, pois eu não achava que isso.bashrc
seria lido ao executar um shell de login. Só estou me perguntando se há uma declaração "oficial" sobre isso.