Como corrigir o terminal não carregando ~ / .bashrc no OS X Lion [fechado]

176

Sempre que abro uma nova guia no Terminal usando Cmd+ T, ele abre o bash no mesmo diretório, como a guia anterior. Isso funciona bem quando estou no ~diretório, mas se estiver em outro lugar, recebo um erro ao carregar.bashrc

Last login: Sat Oct 15 21:10:00 on ttys002
-bash: .bashrc: No such file or directory
Jakub-Arnolds-MacBook-Pro:projects darth$ 

Parece que .bashrcé carregado via caminho relativo e não absoluto, porque se eu fizer source ~/.bashrc, tudo funciona sem problemas.

bashrc carregado

Acho que este é um problema relacionado ao OS X Lion, porque antes da atualização do Snow Leopard, eu não tinha o mesmo problema. Mas isso pode ser causado pelo Terminal sempre abrindo às ~, não me lembro se ele tentou abrir o mesmo diretório.

No entanto, a pergunta permanece a mesma, como posso fazer o carregamento do Terminal ~/.bashrcvia caminho absoluto, e não relativo?

Jakub Arnold
fonte
1
esta pergunta deve ser movida para apple.SE (se possível?), não fechada.
Sparr
@ Sparr Concordo plenamente com você, mas os moderadores estão apenas movendo a pergunta mais nova, não a mais antiga. Veja a discussão aqui
рüффп

Respostas:

357

O terminal abre um shell de logon. Isso significa que ~/.bash_profileserá executado, ~/.bashrcnão.

A solução na maioria dos sistemas é a "exigir" o ~/.bashrcno ~/.bash_profile: basta colocar esse trecho na sua ~/.bash_profile:

[[ -s ~/.bashrc ]] && source ~/.bashrc
ckruse
fonte
8
Alguém poderia explicar o que [[ -s /file/path ]]está fazendo? Tentar o Google para obter uma explicação não é tão fácil.
Shane
18
From man bash: -s file True se o arquivo existir e tiver um tamanho maior que zero.
ckruse
1
"Terminal abre um shell de login" - quais são os outros tipos de shells? Onde posso encontrar mais documentação sobre isso?
dknight
4
Existem os chamados "shells interativos" e "shells de login". O seu manual bash ( man bash) fala sobre isso e explica, capítulo Invocation (apenas procurar INVOCATIONdepois de chamar man bashpor digitação /INVOCATION)
ckruse
3
Não vejo como uma pergunta referente a uma situação de execução de código, resolvida por uma linha de código, é "fora do tópico" para um site de perguntas de programação.
Kheldar 15/02
26

Renomear .bashrcpara .profile(ou vincular o último ao anterior) também deve ser suficiente. Veja aqui .

scorpiodawg
fonte
Ou você pode simbolizá-los: cd && ln -s ./.bashrc ./.profileObserve que os links simbólicos são sensíveis em relação ao caminho do arquivo; acredito que o uso da sintaxe acima funcione, mas para garantir que você possa usar caminhos absolutos em qualquer caso.
9788 Steve Jobsner
1
Oh não? Esses arquivos têm finalidades diferentes. Se você tiver a sintaxe do Bash, .profilefará uma quebra regular sh.
Tripleee 05/10
14

Eu tenho o seguinte no meu ~/.bash_profile:

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi

Se eu tivesse, em .bashrcvez de ~/.bashrc, estaria vendo o mesmo sintoma que você está vendo.

Keith Thompson
fonte