当前位置:  开发笔记 > 编程语言 > 正文

如何在不注销并重新登录的情况下重新加载.bashrc?

如何解决《如何在不注销并重新登录的情况下重新加载.bashrc?》经验,为你挑选了8个好方法。

如果我进行了更改.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,但存在差异:

. ~/.bashrcsource ~/.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中的所有路径/脚本。

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有