如果我进行了更改.bashrc
,如何在不注销并重新登录的情况下重新加载?
1> George Hawki..:
您只需输入命令:
source ~/.bashrc
或者您可以使用命令的较短版本:
. ~/.bashrc
这与登录和退出不完全相同.假设你在.bashrc中有以下行:`export PATH = $ PATH:foo`,然后你将它改为`export PATH = $ PATH:bar`.如果您登录和退出,只有`bar`将在PATH中,但如果你按照你的建议行事,`foo`和`bar`都将在PATH中.你知道解决这个问题的方法吗?
@ HighCommander4 - 一种非常不令人满意的方式来做你想做的事情就是做"bash -l"但是这实际上创建了一个新的子shell,当你注销时,你将返回到封闭的shell,其中"foo"仍在PATH中.如果您只对PATH感兴趣,可以"取消设置PATH"并从头开始重构,但在获取.bashrc之前,可能更容易/更安全的做法是"PATH =/bin:/ usr/bin".如何在登录时建立PATH变量实际上相当复杂,至少包括从登录(参见"man login")和/ etc/profile(参见"man bash")的输入.
它将影响**仅**当前终端.
我还建议创建一个别名(可以存储在〜/ .bashrc或〜/ .bash_aliases中),打开.bashrc,并在编辑器退出后重新加载它.您可以通过在别名中组合两个命令来实现,例如像这样(如果vim是您首选的编辑器,否则将其换成其他东西):```alias editbashrc ='vim~/.bashrc; source~/.bashrc'```.这将使编辑更加顺畅,因为在进行编辑之后,如果使用自定义别名,则无需考虑重新加载.
@Alex你可以通过在〜/ .bash_profile中添加〜/ .bashrc行来自动化它,虽然我不知道这是不是一个好习惯.
2> WhoSayIn..:
或者你可以使用;
exec bash
做同样的事情.(更容易记住,至少对我而言)
exec命令用给定的程序替换shell,在我们的例子中,它用bash替换我们的shell(使用更新的配置文件)
@muradin,`source`是一个内置的shell命令,它执行在当前shell_中作为参数传递的文件的内容.所以在你的例子中,它在当前shell中执行.bashrc文件.并且`exec`命令用给定的程序替换shell,在你的例子中,它用bash替换你的shell(用更新的配置文件)
@SEoF,当你说"bash inception"时,如果你在思考我认为你在想什么,我必须说你错了.与电影不同,当你反复做'exec bash`时,你不会继续从bash进入bash.`exec`命令*用程序替换*shell,在我们的例子中是bash.因此,终端中总会存在一个bash实例.
你能解释一下`source .bashrc`命令和`exec bash`的区别吗?
优雅,但"做同样的事情"并不完全正确.`source~/.bashrc`将保留你的_entire_ shell环境(尽管可能通过'〜/ .bashrc`的来源修改),而`exec bash`只会保留你当前shell的_environment变量_(任何临时更改到当前shell的shell变量,函数,选项都丢失了).根据您的需要,可能首选一种或另一种方法.
那个在CentOS上为我工作,谢谢.
在我特有的超级环境中,这完全是震撼人心的.我的Dockerfile执行一个修改.bashrc的安装脚本.然后我需要重新加载,但是`.〜/ .bashrc`将在`dash`而不是`bash`中执行,因此会出现错误,因为缺少`shopt`.在shell中找不到`source`,所以解决方案也没有.我试过这个并且码头图像构建得很顺利!
这很好,特别是因为bashrc可以在`/ etc`或`/ home`目录中更新,我们不需要关心这个.
这适用于我的Cygwin + win7.谢谢!键入此更快,键入.在〜/ .bashrc
3> mklement0..:
为了补充和对比两个最流行的答案,. ~/.bashrc
并且exec bash
:
两种解决方案都有效地重新加载~/.bashrc
,但存在差异:
. ~/.bashrc
或source ~/.bashrc
将保留您当前的shell:
不同的是重新加载修改~/.bashrc
到当前壳(采购)使得,在当前壳和它的状态被保存,包括环境变量,shell变量,shell选项,外壳的功能,和命令历史记录.
exec bash
或者,更健壮的exec "$BASH"
[1],将用新实例替换当前的shell,因此只保留当前shell的环境变量(包括你自己定义的那些).
换句话说:就shell变量,shell函数,shell选项,命令历史而言,对当前shell的任何临时更改都将丢失.
根据您的需要,可能首选一种或另一种方法.
[1] exec bash
理论上可以执行与 bash
启动当前shell 的不同的可执行文件,如果它恰好存在于前面列出的目录中$PATH
.由于特殊变量$BASH
始终包含启动当前shell的可执行文件的完整路径,exec "$BASH"
因此保证使用相同的可执行文件.
的说明重新"..."
周围$BASH
:双引号确保变量值被照原样使用,而不被解释击; 如果值没有嵌入空格或其他shell元字符(在这种情况下不太可能),则不需要双引号,但使用它们是一种很好的习惯.
@ nitinr708:是的,`exec $ BASH`将来源`〜/ .bashrc`,所以你会在新会话中看到它对shell环境的改变.
4> Randy Procto..:
有人编辑我的答案添加错误的英语,但这是原始的,这不如接受的答案.
. .bashrc
.是"源"内置命令的BASH快捷方式.因此".bashrc"与BASH解释器的"source .bashrc"相同.
这仅在您当前目录实际上是您的主目录时才有效.以下将起作用:.在〜/ .bashrc
凉.谢谢.现在我不知道.
是什么让这项工作?当我做".bashrc"时实际发生了什么?谢谢!
我刚刚提交了一个编辑请求来添加`〜/`,但由于最顶层的答案显示了`source~/.bashrc`和`.〜/ .bashrc`我想知道这个答案是否应该被删除为冗余.
5> James..:
根据您的环境,只需输入
bash
也可以工作.
但是,这将在当前的shell中调用新shell,从而浪费资源.更好地使用@ WhoSayln的[exec](http://www.gnu.org/software/bash/manual/bashref.html#index-exec)解决方案**用新调用的**替换**当前shell.
6> Roy Lin..:
有了这个,你就不会甚至要输入"源〜/ .bashrc中":
包括你的bashrc文件:
alias rc="vim ~/.bashrc && source ~/.bashrc"
每次要编辑bashrc时,只需运行别名" rc "
7> Geoffrey Hal..:
. ~/.bashrc
.
是POSIX强制内置的
备择方案
source ~/.bashrc
source
是.
bash中dot/period的同义词,但在POSIX sh中不是,所以为了获得最大的兼容性,请使用句点.
exec bash
exec
命令用给定的程序替换shell ... - WhoSayIn
exec bash仍然继承当前shell的环境。exec env -i bash会更近一些(如果您当前在登录shell中,则是exec env -i bash -l)。
8> karolus..:
根据您的环境,您可能需要添加脚本以在打开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中的所有路径/脚本。