Se eu fizer alterações .bashrc
, como recarregá-lo sem sair e entrar novamente?
Se eu fizer alterações .bashrc
, como recarregá-lo sem sair e entrar novamente?
Respostas:
Você apenas precisa digitar o comando:
source ~/.bashrc
ou você pode usar a versão mais curta do comando:
. ~/.bashrc
alias editbashrc='vim ~/.bashrc; source ~/.bashrc'
. Isso tornará a edição muito mais suave, pois você não precisará pensar em recarregar, depois de fazer a edição, se estiver usando o alias personalizado.
Ou você pode usar:
exec bash
Isso faz a mesma coisa e é mais fácil de lembrar (pelo menos para mim).
O exec
comando substitui completamente o processo do shell executando a linha de comando especificada. Em nosso exemplo, ele substitui qualquer que seja o shell atual por uma nova instância de bash
(com os arquivos de configuração atualizados).
source .bashrc
comando e exec bash
?
source
é um comando interno do shell que executa o conteúdo do arquivo passado como argumento, no shell atual . Portanto, no seu exemplo, ele executa o arquivo .bashrc no shell atual. E exec
comando substitui o shell com um determinado programa, no seu exemplo, ele substitui o shell com bash (com os arquivos de configuração atualizados)
. ~/.bashrc
será executado em dash
vez de bash
, para que haja um erro porque shopt
está faltando. source
não é encontrado no shell, então essa solução também está disponível. Eu tentei isso e a imagem do docker foi criada sem problemas!
source ~/.bashrc
preservará todo o ambiente do shell (embora provavelmente modificado pela fonte de ~/.bashrc
), enquanto exec bash
preservará apenas as variáveis de ambiente atuais do shell (quaisquer alterações ad-hoc no shell atual em termos de variáveis, função e opções do shell são perdidas). Dependendo das suas necessidades, uma ou outra abordagem pode ser preferida.
exec bash
. O exec
comando substitui o shell pelo programa, no nosso caso, bash. Portanto, sempre existe uma instância de bash no terminal.
Para complementar e contrastar as duas respostas mais populares . ~/.bashrc
e exec bash
:
As duas soluções são recarregadas com eficiência~/.bashrc
, mas há diferenças:
. ~/.bashrc
ou source ~/.bashrc
vai preservar o seu shell atual :
~/.bashrc
pelo recarregamento no shell atual ( fornecimento ), o shell atual e seu estado são preservados , o que inclui variáveis de ambiente, variáveis de shell, opções de shell, funções de shell e histórico de comandos.exec bash
, ou, de maneira mais robusta, exec "$BASH"
[1] , substituirá seu shell atual por uma nova instância e, portanto, preservará apenas as variáveis de ambiente do seu shell atual (incluindo aquelas que você definiu ad-hoc).
Dependendo das suas necessidades, uma ou outra abordagem pode ser preferida.
[1] exec bash
poderia, em teoria, executar um executável diferente bash
daquele que iniciou o shell atual, se ele existir em um diretório listado anteriormente no $PATH
. Como a variável especial $BASH
sempre contém o caminho completo do executável que iniciou o shell atual, exec "$BASH"
é garantido o uso do mesmo executável.
Uma nota de re "..."
torno $BASH
: dupla garante-citando que o valor da variável é utilizada tal como está, sem interpretação por Bash; se o valor não tiver espaços incorporados ou outros metacaracteres do shell (o que provavelmente não é o caso), você não precisará estritamente de aspas duplas, mas usá-las é um bom hábito.
exec $BASH
será fonte ~/.bashrc
, então você verá suas alterações no ambiente do shell na nova sessão.
Alguém editou minha resposta para adicionar um inglês incorreto, mas aqui estava o original, que é inferior à resposta aceita.
. .bashrc
~/
, mas desde que as principais respostas mostra tanto source ~/.bashrc
e . ~/.bashrc
gostaria de saber se esta resposta deve apenas ser eliminada por ser redundante.
Dependendo do seu ambiente, basta digitar
bash
também pode funcionar.
. ~/.bashrc
source ~/.bashrc
exec bash
exec
comando substitui o shell por um determinado programa ... - WhoSayIn
exec bash
ainda herda o ambiente do shell atual. exec env -i bash
estaria mais perto (ou exec env -i bash -l
se você estiver atualmente em um shell de login).
Dependendo do seu ambiente, convém adicionar scripts para que o .bashrc seja carregado automaticamente quando você abrir uma sessão SSH. Recentemente, fiz uma migração para um servidor executando o Ubuntu e lá, .profile, não .bashrc ou .bash_profile é carregado por padrão. Para executar qualquer script no .bashrc, eu precisava executar source ~/.bashrc
toda vez que uma sessão era aberta, o que não ajuda na execução de implantações remotas.
Para que o seu .bashrc seja carregado automaticamente ao abrir uma sessão, tente adicioná-lo ao .profile:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Reabra a sua sessão e ela deverá carregar os caminhos / scripts existentes no .bashrc.
Usei o easyengine para configurar meu servidor baseado em nuvem vultr.
Encontrei meu arquivo bash em /etc/bash.bashrc
.
O mesmo source /etc/bash.bashrc
fez o truque para mim!
atualizar
Ao configurar um servidor bare (ubuntu 16.04), você pode usar as informações acima, quando ainda não configurou um nome de usuário e está fazendo login via root.
É melhor criar um usuário (com privilégios sudo) e fazer login como esse nome de usuário.
Isso criará um diretório para suas configurações, incluindo arquivos .profile e .bashrc.
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/
Agora, você irá editar e (e "fonte") o ~/.bashrc
arquivo.
No meu servidor, ele estava localizado em /home/your_username/.bashrc
(onde your_username
é, na verdade, o novo nome de usuário que você criou acima e agora efetue login)
exec bash é uma ótima maneira de reexecutar e lançar um novo shell para substituir o atual. apenas para adicionar à resposta, $ SHELL retorna o shell atual que é bash. Usando o seguinte, ele recarregará o shell atual e não apenas o bash.
exec $SHELL -l;
Para mim, o que funciona quando altero o PATH é: exec "$BASH" --login
~/.bashrc
, que --login
será não (directamente) de recarga; no nível do usuário, ele será recarregado ~/.bash_profile
(ou ~/.bash_login
ou ~/.profile
).
tipo:
source ~/.bashrc
ou, em formato mais curto:
. ~/.bashrc
.bashrc
está localizado. Uma maneira mais correta de fazer isso, como dito na resposta aceita, é source ~/.bashrc
.
eu uso o seguinte comando no msysgit
. ~/.bashrc
versão mais curta de
source ~/.bashrc
Assumindo um shell interativo, e você gostaria de manter seu histórico de comandos atual e também carregar / etc / profile (que carrega dados do ambiente, incluindo / etc / bashrc e no Mac OS X, carrega os caminhos definidos em /etc/paths.d/ path_helper), anexe seu histórico de comandos e execute um exec do bash com a opção de login ('-l'):
history -a && exec bash -l
Notei que o exec bash
comando puro preservará as variáveis de ambiente, portanto, você precisa usar exec -c bash
para executar o bash em um ambiente vazio.
Por exemplo, você efetua login em um bash e export A=1
, se você exec bash
, em A == 1
.
Se você exec -cl bash
, A
está vazio.
Eu acho que essa é a melhor maneira de fazer seu trabalho.
eu pessoalmente tenho
alias ..='source ~/.bashrc'
no meu bashrc, para que eu possa usar ".." para recarregá-lo.
..
como um apelido para cd ..
, então será muito confuso.
alias rehash='source ~/.bashrc'
é a minha escolha.
export PATH=$PATH:foo
e altere-a paraexport PATH=$PATH:bar
. Se você efetuar login e sair, apenasbar
estará no PATH, mas se você fizer o que sugere, ambosfoo
ebar
estará no PATH. Você conhece uma maneira de contornar isso?