Por que devo fonte .bashrc toda vez que abro o terminal para que os aliases funcionem? [duplicado]

25

Eu adicionei esta linha no meu ~/.bashrcarquivo.

alias myserver='ssh [email protected]'

No entanto, quando abro o terminal e corro myserver, o terminal reclama que

-bash: myserver: command not found

Quando eu fonte meu arquivo .bashrc, no entanto, ( . .bashrc), o alias funciona.

No entanto, não quero obter o arquivo sempre que abrir o terminal para que o alias funcione. Como faço isso acontecer?

David Faux
fonte
3
Este comentário explica o motivo disso. Essa pergunta diz como corrigi-lo.
precisa saber é o seguinte
Muito obrigado! Eu não sabia que iniciar o shell executa esses arquivos em ordem. De fato, adicionando . .bashrcem .bash_profileobras.
David Faux
@ughoavgfhw pode / você deve mudar seu comentário para uma resposta? Dessa forma, pode ser marcado como uma resposta.
Soxman

Respostas:

25

Em resumo, você está colocando seus alias no arquivo errado .bashrc, é por isso que precisa continuar executando o código-fonte para que os alias funcionem em qualquer nova instância do terminal de login.

Do comentário de Chris Johnsen em Por que o .bashrc não é executado automaticamente?

Por padrão, o Terminal inicia o shell via / usr / bin / login, o que torna o shell um shell de login. Em todas as plataformas (e não apenas no Mac OS X), o bash não usa .bashrc para shells de login (apenas / etc / profile e o primeiro de .bash_profile, .bash_login, .profile que existe e é legível). É por isso que “colocar source ~ / .bashrc no seu .bash_profile” é o conselho padrão.

Para mais informações, consulte a página de manual para bash:

man bash

Então olhe na seção INVOCATION.

MrDaniel
fonte
Preciso reiniciar para que as coisas funcionem? Porque eu adicionei source ~/.bashrcao meu .bash_profile, mas eu ainda estou enfrentando o mesmo problema ...
Michiel
11
Não, na maioria dos casos, você só precisa abrir uma nova janela do terminal para que as alterações entrem em vigor, as alterações somente terão efeito na janela recém-aberta.
precisa saber é o seguinte
11

Você sempre pode colocar

if [ -n "$BASH_VERSION" ] && [ -f $HOME/.bashrc ];then
    source $HOME/.bashrc
fi

no arquivo ~/.profileou ~/.bash_profileno mac eu acho.

Oooor, você pode simplesmente colocar suas coisas em .profileou .bash_profile.

Dylan
fonte
Isso é observado na outra resposta - por que você não tem certeza sobre essas coisas?
user151019
Leia esta pergunta muito semelhante: apple.stackexchange.com/q/12993/22003 e adicione qualquer melhoria.
dan
@danielAzuelos Wait; você quer que eu comente na outra página ou atualize minha resposta com base na outra pergunta?
Dylan
@ Mark Eu estava pensando em um sentido muito hipotético - como se o processo terminal de alguém não soubesse a origem .profile? O terminal deles provavelmente não começaria em primeiro lugar, mas ainda é possível ... como se alguém estivesse hackeando o seu / usr / bin / login ou algo assim.
Dylan
→ Dylan: leia esta pergunta muito semelhante: apple.stackexchange.com/q/12993/22003 e você encontrará uma resposta para o seu "talvez?".
dan