问题
If I make changes to .bashrc
, how do I reload it without logging out and back in?
回答1:
You just have to enter the command:
source ~/.bashrc
or you can use the shorter version of the command:
. ~/.bashrc
回答2:
or you could use;
exec bash
does the same thing. (and easier to remember, at least for me)
exec command replaces the shell with given program, in our example, it replaces our shell with bash (with the updated configuration files)
回答3:
To complement and contrast the two most popular answers, . ~/.bashrc and exec bash:
Both solutions effectively reload ~/.bashrc
, but there are differences:
. ~/.bashrc
orsource ~/.bashrc
will preserve your current shell:- Except for the modifications that reloading
~/.bashrc
into the current shell (sourcing) makes, the current shell and its state are preserved, which includes environment variables, shell variables, shell options, shell functions, and command history.
- Except for the modifications that reloading
exec bash
, or, more robustly,exec "$BASH"
[1], will replace your current shell with a new instance, and therefore only preserve your current shell's environment variables (including ones you've defined ad-hoc).- In other words: Any ad-hoc changes to the current shell in terms of shell variables, shell functions, shell options, command history are lost.
Depending on your needs, one or the other approach may be preferred.
[1] exec bash
could in theory execute a different bash
executable than the one that started the current shell, if it happens to exist in a directory listed earlier in the $PATH
. Since special variable $BASH
always contains the full path of the executable that started the current shell, exec "$BASH"
is guaranteed to use the same executable.
A note re "..."
around $BASH
: double-quoting ensures that the variable value is used as-is, without interpretation by Bash; if the value has no embedded spaces or other shell metacharacters (which is not likely in this case), you don't strictly need double quotes, but using them is a good habit to form.
回答4:
Someone edited my answer to add incorrect English, but here was the original, which is inferior to the accepted answer.
. .bashrc
回答5:
Depending on your environment, just typing
bash
may also work.
回答6:
With this, you won't even have to type "source ~/.bashrc":
Include your bashrc file:
alias rc="vim ~/.bashrc && source ~/.bashrc"
Every time you want to edit your bashrc, just run the alias "rc"
回答7:
. ~/.bashrc
. is a POSIX-mandated builtin
Alternatives
source ~/.bashrc
source is a synonym for dot/period . in bash, but not in POSIX sh, so for maximum compatibility use the period.
exec bash
exec
command replaces the shell with a given program... – WhoSayIn
回答8:
Depending upon your environment, you may want to add scripting to have .bashrc load automatically when you open an SSH session. I recently did a migration to a server running Ubuntu, and there, .profile, not .bashrc or .bash_profile is loaded by default. To run any scripts in .bashrc, I had to run source ~/.bashrc
every time a session was opened, which doesn't help when running remote deploys.
To have your .bashrc load automatically when opening a session, try adding this to .profile:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Reopen your session, and it should load any paths/scripts you have in .bashrc.
回答9:
For me what works when I change the PATH is: exec "$BASH" --login
回答10:
I used easyengine to set up my vultr cloud based server.
I found my bash file at /etc/bash.bashrc
.
So source /etc/bash.bashrc
did the trick for me!
update
When setting up a bare server (ubuntu 16.04), you can use the above info, when you have not yet set up a username, and are logging in via root.
It's best to create a user (with sudo privledges), and login as this username instead.
This will create a directory for your settings, including .profile and .bashrc files.
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/
Now, you will edit and (and "source") the ~/.bashrc
file.
On my server, this was located at /home/your_username/.bashrc
(where your_username
is actually the new username you created above, and now login with)
回答11:
exec bash is a great way to re-execute and launch a new shell to replace current. just to add to the answer, $SHELL returns the current shell which is bash. By using the following, it will reload the current shell, and not only to bash.
exec $SHELL -l;
回答12:
Assuming an interactive shell, and you'd like to keep your current command history and also load /etc/profile (which loads environment data including /etc/bashrc and on Mac OS X loads paths defined in /etc/paths.d/ via path_helper), append your command history and do an exec of bash with the login ('-l') option:
history -a && exec bash -l
回答13:
type:
source ~/.bashrc
or, in shorter form:
. ~/.bashrc
回答14:
i use the following command on msysgit
. ~/.bashrc
shorter version of
source ~/.bashrc
回答15:
This will also work..
cd ~
source .bashrc
回答16:
I noticed that pure exec bash
command will preserve the environment variables, so you need to use exec -c bash
to run bash in an empty environment.
For example, you login a bash, and export A=1
, if you exec bash
, the A == 1
.
If you exec -cl bash
, A
is empty.
I think this is the best way to do your job.
回答17:
i personally have
alias ..='source ~/.bashrc'
in my bashrc, so that i can just use ".." to reload it.
来源:https://stackoverflow.com/questions/2518127/how-do-i-reload-bashrc-without-logging-out-and-back-in