Estou usando Ubuntu 22.04.5 LTS
o sistema operacional e a seguinte versão do bash:
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
Encontrei o seguinte em "man bash" na seção INVOCATION:
Quando o bash é invocado como um shell de login interativo, ou como um shell não interativo com a opção --login , ele primeiro lê e executa comandos do arquivo /etc/profile, se esse arquivo existir. Depois de ler esse arquivo, ele procura por ~/.bash_profile, ~/.bash_login e ~/.profile, nessa ordem, e lê e executa comandos do primeiro que existe e é legível.
Eu sei que o bash pode ser "login" de duas maneiras:
- o argumento zero tem um traço antes do nome (
-bash
) - O bash é iniciado com o
--login
sinalizador/opção.
Em "man bash" eles claramente marcaram apenas o segundo caso (se quisessem marcar os dois casos, eles colocariam "non-interactive login shell"; Stephen Kitt também disse em sua resposta que isso se aplica apenas ao segundo caso). Isso significa que se eu iniciar o login bash não interativo da primeira maneira, os comandos do ~/.profile
arquivo não devem ser executados. No entanto, esse não é o caso. Adicionei echo HI
ao arquivo fornecido e executei o seguinte comando no emulador de terminal GNOME ( /dev/pts/0
) para iniciar o login bash não interativo:
exec -l bash -c 'echo $-;echo $0;shopt;sleep 10s'
O texto ("HI") é exibido no terminal, embora não devesse, de acordo com o manual.
Por que isso está acontecendo?
Encontrei uma resposta potencial para minha pergunta aqui . Parece que no meu caso essa opção de tempo de compilação não está comentada, então o bash lê o arquivo "~/.profile". Alguém sabe como verificar se essa opção realmente não está comentada?
No meu caso (no meu ambiente) essa opção não está comentada, por isso o bash lê
~/.profile
o arquivo.Se você quiser verificar se a opção dada está comentada no seu código ou não, olhe o código-fonte do bash para sua versão (especificamente o
config-top.h
arquivo). Se você não tiver o código-fonte. Executesudo nano /etc/apt/sources.list
o comando em um terminal e descomente todas as linhas que começam com "deb-src..." (remova#
do começo). Se você não tiver o nano, use o vim, ou qualquer outra forma de acessar o arquivo. Depois de fazer isso, executeapt-get source bash
e o código-fonte do bash aparecerá no seuhome
diretório.