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 davidfaux@davidfaux.com'

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?


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.


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.


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
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.