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.bashrce~/.bashrc, se esses arquivos existirem. Isso pode ser inibido usando a--norcopçãoA
--rcfileopção file forçará o bash a ler e executar comandos do arquivo em vez de/etc/bash.bashrce~/.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
--loginopçã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_logine~/.profile, nessa ordem, e lê e executa os comandos do primeiro que existe e é legível.A
--noprofileopçã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_profileou ~.profileetc. 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 ~/.bashrcfalharã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?