No Linux e, que eu saiba, todos os sistemas Unix, emuladores de terminal executam shells interativos e sem login por padrão. Isso significa que, para o bash, o shell iniciado irá:
Quando um shell interativo que não é um shell de login é iniciado, o bash lê e executa comandos de
/etc/bash.bashrc
e~/.bashrc
, se esses arquivos existirem. Isso pode ser inibido usando a--norc
opçãoA
--rcfile
opção file forçará o bash a ler e executar comandos do arquivo em vez de/etc/bash.bashrc
e~/.bashrc
.
E para shells de login:
Quando o bash é chamado como um shell de logon interativo ou como um shell não interativo com a
--login
opção, ele primeiro lê e executa comandos do arquivo/etc/profile
, se esse arquivo existir. Depois de ler esse arquivo, ele procura~/.bash_profile
,~/.bash_login
e~/.profile
, nessa ordem, e lê e executa os comandos do primeiro que existe e é legível.A
--noprofile
opção pode ser usada quando o shell é iniciado para inibir esse comportamento.
No OSX, no entanto, o shell padrão (que é o bash) iniciado no terminal padrão (Terminal.app) na verdade origina ~/.bash_profile
ou ~.profile
etc. Em outras palavras, ele atua como um shell de logon.
Pergunta principal : Por que o shell interativo padrão é um shell de login no OSX? Por que a OSX escolheu fazer isso? Isso significa que todas as instruções / tutoriais para itens baseados em shell que mencionam a alteração de itens ~/.bashrc
falharão no OSX ou vice-versa ~/.profile
. Ainda assim, enquanto muitas acusações podem ser feitas na Apple, a contratação de desenvolvedores incompetentes ou idiotas não é uma delas. Presumivelmente, eles tinham uma boa razão para isso, então por quê?
Subquestions: O Terminal.app realmente executa um shell de logon interativo ou mudou o comportamento do bash? Isso é específico do Terminal.app ou é independente do emulador de terminal?