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?


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

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 .


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.