Se eu fizer alterações .bashrc
, como recarregá-lo sem sair e entrar novamente?
1645
Você apenas precisa digitar o comando:
source ~/.bashrc
ou você pode usar a versão mais curta do comando:
. ~/.bashrc
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?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:
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 debash
(com os arquivos de configuração atualizados).fonte
source .bashrc
comando eexec 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. Eexec
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 emdash
vez debash
, para que haja um erro porqueshopt
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
), enquantoexec 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
. Oexec
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
eexec bash
:As duas soluções são recarregadas com eficiência
~/.bashrc
, mas há diferenças:. ~/.bashrc
ousource ~/.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 diferentebash
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.fonte
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.
fonte
~/
, mas desde que as principais respostas mostra tantosource ~/.bashrc
e. ~/.bashrc
gostaria de saber se esta resposta deve apenas ser eliminada por ser redundante.Dependendo do seu ambiente, basta digitar
também pode funcionar.
fonte
Com isso, você não vai mesmo ter que digitar "source ~ / .bashrc":
Inclua seu arquivo bashrc:
Toda vez que você quiser editar seu bashrc, basta executar o alias " rc "
fonte
Alternativas
fonte
exec bash
ainda herda o ambiente do shell atual.exec env -i bash
estaria mais perto (ouexec 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:
Reabra a sua sessão e ela deverá carregar os caminhos / scripts existentes no .bashrc.
fonte
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)fonte
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;
fonte
Para mim, o que funciona quando altero o PATH é:
exec "$BASH" --login
fonte
~/.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
fonte
.bashrc
está localizado. Uma maneira mais correta de fazer isso, como dito na resposta aceita, ésource ~/.bashrc
.eu uso o seguinte comando no msysgit
versão mais curta de
fonte
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'):
fonte
Isso também vai funcionar ..
fonte
~
a alteração do diretório de trabalho para o diretório inicial do usuário?Notei que o
exec bash
comando puro preservará as variáveis de ambiente, portanto, você precisa usarexec -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
, emA == 1
.Se você
exec -cl bash
,A
está vazio.Eu acho que essa é a melhor maneira de fazer seu trabalho.
fonte
eu pessoalmente tenho
alias ..='source ~/.bashrc'
no meu bashrc, para que eu possa usar ".." para recarregá-lo.
fonte
..
como um apelido paracd ..
, então será muito confuso.alias rehash='source ~/.bashrc'
é a minha escolha.