Sim, esse é o comportamento esperado.
O comportamento, resumindo, é o seguinte:
- bash começou como um shell de login interativo: lê
~/.profile - bash iniciado como um shell interativo de não-login: lê
~/.bashrc
Leia o manual do bash sobre os arquivos de inicialização para obter mais detalhes.
Pessoalmente, acho que esse comportamento é estranho e ainda não encontrei uma racionalização para essa decisão de projeto.
Algumas explicações da terminologia:
- Um shell interativo é um shell com o qual você pode interagir, o que significa que você pode digitar comandos nele. A maioria das shells que você usará são shells interativos.
- Um shell não interativo é um shell com o qual você não pode interagir. Scripts shell são executados dentro de shells não interativos.
- Um shell de login é o shell que é iniciado quando você faz login no sistema.
- Um shell não-login é um shell que é iniciado após o processo de login.
A maioria das shells que você vê são shells interativas não-login . Isto é especialmente verdadeiro se você estiver executando um ambiente gráfico como o gnome, porque então o gnome é o "shell de login". Qualquer sessão bash iniciada dentro do gnome é um shell não-login. Se você quiser ver um shell de login interativo real, acesse um console virtual (usando Ctrl+Alt+F1 ) e, em seguida, efetue login usando seu nome de usuário e senha. Esse é um shell bash de logon interativo real. Você pode voltar para o shell gráfico usando Ctrl+Alt+F7 .
Existe uma opção --login que fará o bash se comportar como se fosse um shell de login mesmo se iniciado após você ter efetuado login. Configurar o gnome-terminal para iniciar o bash como um shell de login significa que ele iniciará o bash usando o --login option.
Normalmente, você quer que o bash sempre leia ~/.bashrc em um shell interativo. Aqui está como eu recomendo fazer isso:
Crie um arquivo ~/.bash_profile . Se o bash for iniciado como um shell de login, ele procurará primeiro ~/.bash_profile antes de procurar por ~/.profile . Se o bash encontrar ~/.bash_profile , ele não lerá ~/.profile .
Coloque as seguintes linhas em ~/.bash_profile :
[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"
Agora, se o bash for iniciado como um shell de login interativo, ele lerá os seguintes arquivos:
-
~/.bash_profile -
~/.profile -
~/.bashrc
e se o bash for iniciado como um shell interativo de não-login:
-
~/.bashrc
Você deve colocar coisas que são específicas do bash em ~/.bashrc e coisas que não são bash específicas em ~/.profile . Por exemplo, PATH entra em ~/.profile e HISTCONTROL entra em ~/.bashrc .
Observe que ~/.profile não é bash específico. Outros shells baseados em texto (por exemplo sh ou ksh) e shells gráficos (gnome) também lêem ~/.profile . É por isso que você não deve colocar coisas específicas de bash em ~/.profile .