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

44

Quando eu defino um novo alias no arquivo .bash_aliases ou uma nova função no arquivo .bashrc , existe 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 abas abertas, muitos arquivos abertos e no meio do trabalho)?

    
por xralf 19.10.2011 / 11:37

3 respostas

55

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

source ~/.bashrc

Uma sintaxe alternativa:

. ~/.bashrc

Note que se você tem muitas instâncias de bash em execução no seu terminal (você mencionou várias guias), você terá que executá-lo em todas as instâncias.

    
por 19.10.2011 / 11:41
4

Digitar . ~/.bashrc na linha de comando será executado .bashrc e, portanto, quaisquer funções definidas nesse arquivo serão criadas.

.bashrc em si também chamará e executará .bash_aliases ( se existir) se .bashrc tiver este código:

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

considerando que usar . ~/.bash_aliases sozinho (na linha de comando, por exemplo) irá apenas tentar executar .bash_aliases sem envolver .bashrc e dará um erro se o arquivo não existir (daí o teste de verificação de arquivo quando estiver em .bashrc ).

    
por 07.06.2012 / 05:29
1

Às vezes você vai querer transformar um alias em uma função, mas quando você fonte do arquivo bashrc, um erro estranho pode ocorrer, algo como isto:

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

Isso acontece porque o nome do alias está em conflito com o nome da função recém-definida. Tanto quanto eu sei, para evitar este tem duas opções:

O primeiro método é usar exec bash , a desvantagem aqui é que você perde seu ambiente:

bash-4.3 $
[1]: env_var="a value"
-----------------------------------------------------------------------
bash-4.3 $
[2]: echo $env_var
a value
-----------------------------------------------------------------------
bash-4.3 $
[3]: exec bash
-----------------------------------------------------------------------
bash-4.3 $
[1]: echo $env_var

-----------------------------------------------------------------------

Então, isso nos deixa com o segundo método, que é unalias tudo, então fonte do arquivo bashrc. Isso preserva nosso ambiente (com a exceção notável de aliases):

bash-4.3 $
[1]: unalias -a && . $HOME/.bashrc

Normalmente eu tenho isso como um alias no meu bashrc com o nome de reload.

    
por 04.08.2017 / 03:11