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 --login
que 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 --login
opção
Geralmente, você deseja que o bash sempre leia ~/.bashrc
em um shell interativo. Aqui está como eu recomendo fazer isso:
Crie um ~/.bash_profile
arquivo Se o bash for iniciado como um shell de login, ele primeiro procurará ~/.bash_profile
antes 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 ~/.bashrc
e itens não específicos do bash ~/.profile
. Por exemplo, PATH
entra ~/.profile
e HISTCONTROL
entra ~/.bashrc
.
Observe que ~/.profile
nã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
.