如果我对.bashrc进行了更改,如何在不注销并重新登录的情况下重新加载它?


当前回答

我知道你想要一个shell,因为在注销并再次登录后。我认为实现这一目标的最佳方式是:

exec env -i HOME="$HOME" "$SHELL" -l

exec将替换当前的shell,这样当新的shell退出时就不会剩下它了。env将创建一个新的空环境,使用-i,我们添加$HOME,这样$shell提供的shell(通常是bash)可以找到~/.profile/~/.bash_profile(因此(在ubuntu上或如果指定)~/.bash rc)。不过我不完全确定。

其他回答

我注意到纯exec bash命令将保留环境变量,因此需要使用exec-c bash在空环境中运行bash。

例如,登录一个bash,然后导出a=1,如果执行bash,则a==1。

如果执行-cl bash,则A为空。

我认为这是完成你工作的最佳方式。

有人编辑了我的答案,添加了不正确的英语,但这是原文,比公认的答案差。

. .bashrc
. ~/.bashrc

.是POSIX授权的内置


选择

source ~/.bashrc

source是点/句点的同义词。在bash中,但在POSIX sh中没有,因此为了获得最大的兼容性,请使用句点。

exec bash

exec命令用给定的程序替换shell…–WhoSayIn公司

请注意,$SHELL可能会产生意想不到的结果例如,连接到Docker环境

echo $SHELL
/usr/sbin/nologin

所以,如果你尝试,你就会断开连接

exec $SHELL
This account is currently not available.

所以你可能需要使用更复杂的东西,比如

exec $(pgrep -l sh | grep "^`echo $$` " | cut -d" " -f2)

假设每个shell都包含“sh”

pgrep -l sh | grep "^`echo $$` " | cut -d" " -f2

生成完整的命令如果有参数或标志,则可能必须使用-f2、3、4或尝试

pgrep -l sh | grep "^`echo $$` " | sed -E 's/^[0-9]+ //'

但请阅读以上所有建议就我个人而言,我不喜欢泄露历史。。。但这取决于你和你的需要

我在msysgit上使用以下命令

. ~/.bashrc

的较短版本

source ~/.bashrc