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
.