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


当前回答

这样,您甚至不必键入“source~/.bashrc”:

包括bashrc文件:

alias rc="vim ~/.bashrc && source ~/.bashrc"

每次您想编辑bashrc时,只需运行别名“rc”

其他回答

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

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

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

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

请注意,$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]+ //'

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

为了补充和对比两个最流行的答案,.~/。bashrc和exec bash:

两种解决方案都有效地重新加载~/.bashrc,但存在差异:

./.bashrc或source~/.bashrc将保留当前shell会话:除了将~/.bashrc重新加载到当前shell(sourcing)中所做的修改外,当前shell进程及其状态将被保留,其中包括环境变量、shell变量、shell选项、shell函数和命令历史记录。exec bash,或者更有力地说,exec“$bash”[1],将用新实例替换当前shell,因此只保留当前shell的环境变量(包括您在会话中临时定义的环境变量)。换句话说:在shell变量、shell函数、shell选项和命令历史记录方面对当前shell的任何特殊更改都将丢失。

根据您的需要,可以选择一种或另一种方法。


注:上述内容同样适用于其他外壳:

要将exec方法应用于任何默认shell,请使用exec$shell同样,源方法要求您知道并指定特定于shell的初始化文件的名称;例如,对于zsh:.~/。zshrc公司


[1] 理论上,execbash可以执行一个不同于启动当前shell的bash可执行文件,如果它恰好存在于$PATH前面列出的目录中。由于特殊变量$BASH始终包含启动当前shell的可执行文件的完整路径,因此exec“$BASH”保证使用相同的可执行程序。注意$BASH附近的“…”:双引号确保变量值按原样使用,而无需BASH解释;如果该值没有嵌入空格或其他shell元字符(在本例中很可能是这样),则不必严格使用双引号,但使用它们是一个好习惯。

我使用easyfengine设置了基于vultr云的服务器。我在/etc/bash.basrc中找到了我的bash文件。

所以source/etc/bash.bashc为我做了这个把戏!

使现代化

在设置裸机(ubuntu 16.04)时,当您尚未设置用户名并通过root登录时,可以使用上述信息。

最好创建一个用户(具有sudo权限),并以该用户名登录。这将为您的设置创建一个目录,包括.profile和.bashrc文件,如前一个资源中所述。

现在,您将编辑和(并源代码)~/.bashrc文件。

在我的服务器上,它位于/home/your_username/.bashrc(其中your_username实际上是您在上面创建的新用户名,现在使用登录)

execbash是重新执行和启动新shell以替换当前shell的好方法。为了补充答案,$SHELL返回当前的SHELL,即bash。通过使用以下命令,它将重新加载当前shell,而不仅仅是bash。

exec $SHELL -l;