Sim, esse é o comportamento esperado.
O comportamento, em suma, é o seguinte:
- bash iniciado como um shell de logon interativo: lê
~/.profile
- bash iniciado como um shell interativo sem logon: lê
~/.bashrc
Leia o manual do bash sobre 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 design.
Alguma explicação 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 conchas que você usará são conchas interativas.
- Um shell não interativo é um shell com o qual você não pode interagir. Os scripts de shell são executados dentro de shells não interativos.
- Um shell de login é o shell iniciado quando você faz login no seu sistema.
- Um shell sem login é um shell iniciado após o processo de login.
A maioria dos shells que você vê são shells interativos sem login . Isto é especialmente verdade se você estiver executando um ambiente gráfico como o gnome, porque o gnome é o "shell de login". Qualquer sessão bash iniciada dentro do gnome é um shell que não é de login. Se você quiser ver um shell de logon interativo real, acesse um console virtual (usando Ctrl+Alt+F1) e efetue login usando seu nome de usuário e senha. Esse é um shell de basquete de logon interativo real. Você pode voltar ao shell gráfico usando Ctrl+Alt+F7.
Existe uma opção --loginque fará o bash se comportar como se fosse um shell de login, mesmo que iniciado após o seu login. Configurar o gnome-terminal para iniciar o bash como um shell de login significa que ele iniciará o bash usando a --loginopção
Geralmente, você deseja que o bash sempre leia ~/.bashrcem um shell interativo. Aqui está como eu recomendo fazer isso:
Crie um ~/.bash_profilearquivo Se o bash for iniciado como um shell de login, ele primeiro procurará ~/.bash_profileantes de procurar ~/.profile. Se o bash encontrar ~/.bash_profile, ele não será lido ~/.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 sem logon:
~/.bashrc
Você deve colocar itens específicos do bash ~/.bashrce itens não específicos do bash ~/.profile. Por exemplo, PATHentra ~/.profilee HISTCONTROLentra ~/.bashrc.
Observe que ~/.profilenão é específico do bash. Outros shells baseados em texto (por exemplo, sh ou ksh) e shells gráficos (gnome) também são lidos ~/.profile. É por isso que você não deve colocar itens específicos do bash ~/.profile.