Atualizar aliases e funções depois de definir novos aliases e funções?


56

Quando defino um novo alias no .bash_aliasesarquivo ou uma nova função no .bashrcarquivo, há algum comando de atualização para poder usar imediatamente os novos aliases ou funções sem fechar o terminal (no meu caso xfce4-terminal com algumas guias abertas, muitos arquivos abertos e no meio do trabalho)?


6
Observe que não há nenhum comando que torne esse novo comando conhecido em todos os seus terminais / guias abertos. Você terá que fazer o . .bashrcou source .bashrcem todos os shell que tiver aberto.
Paul Tomblin

Respostas:


66

O fornecimento do arquivo alterado fornecerá acesso ao alias ou função recém-gravado no terminal atual, por exemplo:

source ~/.bashrc

Uma sintaxe alternativa:

. ~/.bashrc

Observe que se você tiver muitas instâncias do bash em execução no seu terminal (você mencionou várias guias), será necessário executá-lo em todas as instâncias.


3
sourceé derivado do csh. O jeito da casca de bourne é . .bashrc.
Paul Tomblin

É interessante que isso não funcione quando eu defino alias prg='prg.py'. Eu tenho que fechar o terminal.
xralf

"você terá que executar isso em todas as instâncias." - Observe que os usuários do zsh podem configurar o TMOUT e o TRAPALRM adequadamente para stat e (se necessário) obter novamente ~ / .zshrc uma vez por segundo ou em qualquer outro intervalo razoável. Eu não acredito que o bash possa fazer isso, no entanto.
Kevin

6

A digitação . ~/.bashrcna linha de comando será executada .bashrce, portanto, quaisquer funções definidas nesse arquivo serão criadas.

.bashrcele também chamará e executará .bash_aliases( se existir) se .bashrctiver este código:

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

enquanto o uso . ~/.bash_aliasessozinho (na linha de comando, por exemplo) tentará executar .bash_aliasessem envolver .bashrc e causará um erro se o arquivo não existir (daí o teste de verificação de arquivo quando estiver dentro .bashrc).


2

Às vezes, você deseja transformar um alias em uma função, mas quando você cria o arquivo bashrc, pode ocorrer um erro estranho:

. ~/.bashrc
bash: /home/username/.bashrc: line 38: syntax error near unexpected token `('
bash: /home/username/.bashrc: line 38: `hello_world() {'

Isso pode estar acontecendo porque o nome alternativo está em conflito com o nome da função recém-definida. Até onde eu sei, para evitar isso, é necessário unalias tudo, depois forneça o arquivo bashrc:

bash-4.3 $
unalias -a && . $HOME/.bashrc
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.