Normalmente, bash
apenas origina o arquivo de script de inicialização ~/.bashrc
para shells interativos, sem login .
Geralmente, bash
apenas origina o arquivo de script de inicialização ~/.profile
para shells interativos login .
Geralmente, o Terminal.app trata as novas janelas de terminal como shells interativos de login .
Portanto, em circunstâncias normais, somente seu ~/.profile
é lido e executado; seu ~/.bashrc
nunca é lido e executado.
Para resolver isso, eu geralmente crio o script de inicialização do shell chamado ~/.profile
(se ele ainda não existir) e adiciono o seguinte comando a esse arquivo para verificar se o arquivo ~/.bashrc
existe, e fontes (lê e executa dentro do processo shell atual, não subshell) se existir:
test -f ~/.bashrc && source ~/.bashrc
Reformulando conforme solicitado:
O aplicativo Terminal do Mac OS X geralmente executa seu shell ( bash
) no modo "login". Quando bash
é executado no modo de login, ele não lê / executa ~/.bashrc
. Em vez disso, lê e executa ~/.profile
. Se você quiser colocar coisas em seu ~/.bashrc
e tê-las lidas e executadas em todas as novas janelas do Terminal, você precisa criar um arquivo de script chamado ~/.profile
, e ter esse arquivo contendo um comando que procure por seu ~/.bashrc
e lê e executa.
No caso de o verbo "source" lançar você: "sourcing" um arquivo de script shell é quando um shell (como bash
) lê os comandos shell de um arquivo e executa esses comandos no processo shell atual , então eles afetam o ambiente do atual processo de shell . Normalmente, outros arquivos de script de shell que você escreve não são originados ; em vez disso, eles são executados em um subcampo (uma instância ou cópia separada de bash
) e não podem alterar nada no ambiente de seu shell pai (a instância principal de bash
que foi iniciada quando você abriu a nova janela do Terminal).
Para obter um shell para criar um script, use o comando source
, que é incorporado ao shell. Um atalho para o comando source
é .
(sim, apenas um caractere ponto / período / ponto final). Em uma versão anterior dessa resposta, usei o operador .
em vez do comando source
.