如果对进行更改.bashrc
,如何在不注销并重新登录的情况下重新加载它?
如果对进行更改.bashrc
,如何在不注销并重新登录的情况下重新加载它?
Answers:
您只需要输入命令:
source ~/.bashrc
或者您可以使用命令的较短版本:
. ~/.bashrc
alias editbashrc='vim ~/.bashrc; source ~/.bashrc'
。这将使编辑更加顺畅,因为如果使用自定义别名,则在进行编辑后无需考虑重新加载。
或者您可以使用:
exec bash
这做同样的事情,并且更容易记住(至少对我而言)。
该exec
命令通过运行指定的命令行来完全替换Shell进程。在我们的示例中,它将用bash
(更新的配置文件)的新实例替换当前外壳程序。
source .bashrc
命令和的区别exec bash
吗?
source
是一个内置的shell命令,它在当前shell中执行作为参数传递的文件的内容。因此,在您的示例中,它在当前shell中执行.bashrc文件。然后,exec
命令用给定程序替换外壳,在您的示例中,命令用bash替换外壳(使用更新的配置文件)
. ~/.bashrc
它将在dash
而不是中执行bash
,因此会出现一个错误,因为shopt
丢失了。source
从外壳中找不到,所以解决方案也出来了。我尝试了这一点,并顺利构建了docker映像!
source ~/.bashrc
将保留您的整个外壳环境(尽管可能会通过的供应源进行修改~/.bashrc
),而exec bash
将仅保留当前外壳的环境变量(就外壳变量,功能,选项而言,对当前外壳的任何临时更改都将丢失)。根据您的需求,一种或另一种方法可能是首选。
exec bash
。该exec
命令将 shell 替换为程序,在本例中为bash。因此,终端中始终存在一个bash实例。
为了补充和对比两个最受欢迎的答案,. ~/.bashrc
以及exec bash
:
两种解决方案都可以有效地重新加载~/.bashrc
,但是存在差异:
. ~/.bashrc
或source ~/.bashrc
将保留您当前的shell:
~/.bashrc
到当前壳(采购)使得,在当前壳和它的状态被保存,包括环境变量,shell变量,shell选项,外壳的功能,和命令历史记录。exec bash
,或更确切地说,是exec "$BASH"
[1],它将用一个新实例替换当前的shell,因此仅保留当前shell的环境变量(包括您自定义的变量)。
根据您的需求,一种或另一种方法可能是首选。
[1] exec bash
从理论上讲,可以执行与 bash
启动当前外壳程序不同的可执行文件,前提是该文件恰好存在于之前列出的目录中$PATH
。由于特殊变量$BASH
始终包含启动当前外壳程序的可执行文件的完整路径,exec "$BASH"
因此请确保使用相同的可执行文件。
的说明重新"..."
周围$BASH
:双引号确保变量值被照原样使用,而不被解释击; 如果该值没有嵌入的空格或其他shell元字符(在这种情况下不太可能),则您不一定严格要求双引号,但是使用它们是一种好习惯。
exec $BASH
将使用source ~/.bashrc
,因此您将在新会话中看到其对shell环境的更改。
有人编辑了我的答案以添加不正确的英语,但这是原始答案,不如被接受的答案。
. .bashrc
~/
,但是由于最上面的答案同时显示了两者source ~/.bashrc
,因此. ~/.bashrc
我想知道是否应该仅将这个答案作为多余的内容删除。
根据您的环境,只需键入
bash
可能也可以。
. ~/.bashrc
source ~/.bashrc
exec bash
exec
命令用给定的程序替换外壳 ... – WhoSayIn
exec bash
仍然继承当前shell的环境。exec env -i bash
会更近一些(或者exec env -i bash -l
如果您当前在登录Shell中)。
根据您的环境,您可能需要添加脚本以在打开SSH会话时自动加载.bashrc。我最近迁移到了运行Ubuntu的服务器,默认情况下加载的是.profile,而不是.bashrc或.bash_profile。要在.bashrc中运行任何脚本,source ~/.bashrc
每次打开会话时都必须运行,这在运行远程部署时无济于事。
要在打开会话时自动加载.bashrc,请尝试将其添加到.profile中:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
重新打开会话,它将加载.bashrc中的所有路径/脚本。
我使用easyengine设置了基于vultr云的服务器。
我在找到了bash文件/etc/bash.bashrc
。
所以 source /etc/bash.bashrc
奏效了我!
更新
设置裸服务器(ubuntu 16.04)时,如果尚未设置用户名并通过root登录,则可以使用上述信息。
最好创建一个用户(具有sudo privledges),然后以该用户名登录。
这将为您的设置创建一个目录,包括.profile和.bashrc文件。
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/
现在,您将编辑和(并“来源”) ~/.bashrc
文件。
在我的服务器上,它位于/home/your_username/.bashrc
(your_username
实际上是您在上面创建的新用户名,现在使用来登录)
exec bash是重新执行并启动新Shell来替换当前外壳的好方法。只是为了增加答案,$ SHELL返回当前的shell,即bash。通过使用以下命令,它将重新加载当前的shell,而不仅是bash。
exec $SHELL -l;
对我来说,更改PATH时起作用的是: exec "$BASH" --login
~/.bashrc
,这--login
将不(直接)的重载; 在用户一级,它将重新加载~/.bash_profile
(或~/.bash_login
或~/.profile
)。
我在msysgit上使用以下命令
. ~/.bashrc
的短版
source ~/.bashrc
这也将起作用。
cd ~
source .bashrc
~
将工作目录更改为用户主目录?
我个人有
alias ..='source ~/.bashrc'
在我的bashrc中,这样我就可以使用“ ..”来重新加载它了。
..
用作的别名cd ..
,因此会造成混乱。
alias rehash='source ~/.bashrc'
是我的选择。
export PATH=$PATH:foo
,然后将其更改为export PATH=$PATH:bar
。如果你登录并退了出去,只bar
将在PATH,但如果你有什么建议,都foo
和bar
将在PATH。您知道解决这个问题的方法吗?