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


如果我做了改动 .bashrc,如何在不退出并重新登录的情况下重新加载?


1212
2018-03-25 17:58


起源




答案:


您只需输入命令:

source ~/.bashrc

或者您可以使用命令的较短版本:

. ~/.bashrc

1963
2018-03-25 18:01



这与登录和退出不完全相同。假设你在.bashrc中有以下行: export PATH=$PATH:foo,然后你把它改成 export PATH=$PATH:bar。如果您仅登录和退出 bar 将在PATH,但如果你做你的建议,两者 foo 和 bar 将在PATH中。你知道解决这个问题的方法吗? - HighCommander4
@ HighCommander4 - 一种非常不令人满意的方式来做你想做的事情就是做“bash -l”然而这实际上会创建一个新的子shell,当你注销时,你将返回到封闭的shell,其中“foo”仍在PATH中。如果您只对PATH感兴趣,可以“取消设置PATH”并从头开始重构,但在获取.bashrc之前,可能更容易/更安全的做法是“PATH = / bin:/ usr / bin”。如何在登录时建立PATH变量实际上相当复杂,至少包括从登录(参见“man login”)和/ etc / profile(参见“man bash”)的输入。 - George Hawkins
@Alex你可以通过在〜/ .bash_profile中添加〜/ .bashrc行来自动化它,虽然我不知道这是不是一个好习惯。 - Vivek Gani
我还建议创建一个别名(可以存储在〜/ .bashrc或〜/ .bash_aliases中),打开.bashrc,并在编辑器退出后重新加载它。您可以通过在别名中组合两个命令来实现,例如像这样(如果vim是您首选的编辑器,否则将其交换为其他内容): alias editbashrc='vim ~/.bashrc; source ~/.bashrc'。这将使编辑更加顺畅,因为如果使用自定义别名,在编辑之后您不需要考虑重新加载。 - Samuel Lampa
它会影响 只要 目前的终端。 - matepal297


或者你可以使用;

exec bash

做同样的事情。 (更容易记住,至少对我而言)

EXEC 命令用给定的程序替换shell,在我们的例子中,它用bash替换我们的shell(使用更新的配置文件)


196
2018-03-06 13:11



我认为这是最优雅的一个。 - David 天宇 Wong
bash成立...... - SEoF
你能解释一下它的区别吗? source .bashrc 命令和 exec bash? - muradin
@muradin, source 是一个内置的shell命令,它执行作为参数传递的文件的内容, 在当前的shell中。所以在你的例子中,它在当前shell中执行.bashrc文件。和 exec 命令用给定的程序替换shell,在你的例子中,它用bash替换你的shell(使用更新的配置文件) - WhoSayIn
@SEoF,当你说“bash inception”时,如果你在思考我认为你在想什么,我必须说你错了。与电影不同的是,当你反复做的时候,你不会继续从bash进入bash exec bash。该 exec 命令 取代 带有程序的shell,在我们的例子中是bash。因此,终端中总会存在一个bash实例。 - John Red


补充和对比 两个最受欢迎的答案, . ~/.bashrc 和 exec bash

两种解决方案 有效 重装 ~/.bashrc,但有区别:

  • source ~/.bashrc 将 保留 你当前的shell

    • 除了重新加载的修改 ~/.bashrc 进入当前的shell(采购)使, 当前shell及其状态 是 罐头,包括环境变量,shell变量,shell选项,shell函数和命令历史记录。
  • exec bash或者,更强大, exec "$BASH"[1], 将 更换 你当前的shell 使用新实例,因此 只保留你当前的shell 环境变量


69
2018-01-28 23:07



在我问之前你回答了我的问题。这很好知道;我经常为单个会话设置我的CLASSPATH。 - swinefish
因此,即使我调用exec“$ BASH”,我将在我打开的shell中找到.bashrc设置的变量(使用与我当前会话相同的可执行文件)? - nitinr708
@ nitinr708:是的, exec $BASH 将来源 ~/.bashrc,因此您将在新会话中看到对shell环境的更改。 - mklement0
$ BASH周围有什么报价?他们有必要吗? - jena
@jena:请在答案中查看脚注的更新。 - mklement0


有人编辑我的答案添加错误的英语,但这是原始的,这不如接受的答案。

. .bashrc

43
2018-03-25 17:59



这仅在您当前目录实际上是您的主目录时才有效。以下将起作用:。在〜/ .bashrc - Brian Showalter
是什么让这项工作?当我做“.bashrc”时实际发生了什么?谢谢! - Jed Daniels
。是“源”内置命令的BASH快捷方式。因此“.bashrc”与BASH解释器的“source .bashrc”相同。 - Brian Showalter
凉。谢谢。现在我不知道。 - Jed Daniels
我刚刚提交了一个要添加的编辑请求 ~/,但由于最佳答案显示两者 source ~/.bashrc 和 . ~/.bashrc 我想知道这个答案是否应该被删除为冗余。 - Max Ghenis


根据您的环境,只需输入

bash

也可以工作。


15
2018-03-08 11:51



但是,这将在当前的shell中调用新的shell,从而浪费资源。更好地使用@ WhoSayln EXEC 解决方案 取代 新调用的当前shell。 - Bernhard Wagner
是的只是使用来源。这完全没必要也很烦人。 - dylnmc
除了@ BernhardWagner的评论之外,如果你产生一个新的shell,你也会失去你当前的bash历史 - peter


有了这个,你 惯于 甚至要输入“source~ / .bashrc”:

包括你的bashrc文件:

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

每次要编辑bashrc时,只需运行别名“RC


12
2018-02-29 19:39





TL; DR

. ~/.bashrc

TMI

. ~/.bashrc

。是“源”内置命令的BASH快捷方式。 - Brian Showalter

source ~/.bashrc

替代

exec bash
  • source 是一个内置的shell命令,它执行作为参数传递的文件的内容, 在当前的shell中
  • exec 命令 替换shell 给定的程序......
  • - WhoSayIn

6
2018-02-14 21:34



exec bash 仍然继承当前shell的环境。 exec env -i bash 会更近(或 exec env -i bash -l 如果您当前在登录shell中)。 - chepner