1970

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

4

17 回答 17

3156

您可以输入长格式命令:

source ~/.bashrc

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

. ~/.bashrc
于 2010-03-25T18:01:04.580 回答
340

或者你可以使用:

exec bash

这做同样的事情,并且更容易记住(至少对我来说)。

exec命令通过运行指定的命令行完全替换了 shell 进程。在我们的示例中,它用新的实例bash(使用更新的配置文件)替换当前 shell 的任何内容。

于 2012-03-06T13:11:46.510 回答
158

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

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

  • . ~/.bashrcsource ~/.bashrc保留您当前的 shell 会话

    • 除了重新加载~/.bashrc到当前 shell ( sourcing ) 所做的修改外,当前shell 进程及其状态都被保留,其中包括环境变量、shell 变量、shell 选项、shell 函数和命令历史记录。
  • exec bash,或者更可靠的exec "$BASH"[1],将用新实例替换您当前的 shell,因此保留当前 shell 的环境变量(包括您在会话中临时定义的环境变量)。

    • 换句话说:在 shell 变量、shell 函数、shell 选项、命令历史记录方面对当前 shell 的任何临时更改都将丢失。

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


注意:上述内容也类似地适用于其他 shell

  • 要将exec方法应用于您的默认 shell,请使用exec $SHELL
  • 同样,采购方法要求您知道并指定特定于 shell 的初始化文件的名称;例如,对于zsh. ~/.zshrc

[1]exec bash理论上可以执行与启动当前 shell 的可执行文件不同 bash的可执行文件,如果它恰好存在于$PATH. 由于特殊变量$BASH始终包含启动当前 shell 的可执行文件的完整路径,exec "$BASH"因此保证使用相同的可执行文件。关于周围
的注意事项:双引号确保变量值按原样使用,而不由 Bash 解释;如果该值没有嵌入空格或其他 shell 元字符(在这种情况下很可能),那么您并不严格需要双引号,但使用它们是形成的好习惯。"..."$BASH

于 2016-01-28T23:07:51.750 回答
47

有人编辑了我的答案以添加不正确的英语,但这是原版,不如接受的答案。

. .bashrc
于 2010-03-25T17:59:57.330 回答
21

有了这个,你甚至不必输入“source ~/.bashrc”:

包括您的 .bashrc 文件:

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

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

于 2016-02-29T19:39:09.187 回答
19

根据您的环境,只需键入

bash

也可以工作。

于 2012-03-08T11:51:51.987 回答
17
. ~/.bashrc

.是 POSIX 强制的内置


备择方案

source ~/.bashrc

source在 bash中是点/句点的同义词.,但在 POSIX sh 中不是,因此为了获得最大的兼容性,请使用句点。

exec bash
  • exec命令用给定的程序替换 shell ... – WhoSayIn
于 2017-02-14T21:34:57.407 回答
8

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

exec $SHELL -l;
于 2019-06-01T23:09:55.350 回答
6

根据您的环境,您可能希望添加脚本以.bashrc在您打开 SSH 会话时自动加载。我最近迁移到了运行 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.

于 2018-10-04T12:11:49.523 回答
3

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

source /etc/bash.bashrc的诀窍也是如此!

更新

设置裸服务器(ubuntu 16.04)时,如果您尚未设置用户名并通过root登录,则可以使用上述信息。

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

现在,您将编辑和(和source)该~/.bashrc文件。

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

于 2018-11-10T23:52:19.293 回答
3

对我来说,当我更改 PATH 时有效的是:exec "$BASH" --login

于 2018-08-08T20:13:16.687 回答
2

我在 msysgit 上使用以下命令

. ~/.bashrc

较短的版本

source ~/.bashrc
于 2014-10-02T20:32:33.383 回答
2

假设是一个交互式 shell,并且您希望保留当前的命令历史记录并加载 /etc/profile(它加载环境数据,包括 /etc/bashrc 并且在 Mac OS X 上加载 /etc/paths.d/ 中定义的路径通过path_helper),附加您的命令历史记录并使用登录('-l')选项执行 bash:

history -a && exec bash -l
于 2018-11-14T00:57:32.600 回答
1

我了解您在注销并再次登录后想要一个外壳。我认为实现这一目标的最佳方法是:

exec env -i HOME="$HOME" "$SHELL" -l

exec将替换当前的 shell,这样当新的 shell 退出时你就不会留下它。env将创建一个新的空环境,-i我们添加$HOME以便您的 shell(通常是 bash)$SHELL可以找到~/.profile/ ~/.bash_profile(因此(在 ubuntu 上或如果指定)~/.bashrc)。这些将通过-l. 我不完全确定。

于 2022-01-28T09:06:02.950 回答
1

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

例如,您登录 bash,export A=1如果您exec bash是 ,则A == 1.

如果你exec -cl bashA是空的。

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

于 2018-05-22T13:53:48.053 回答
0

这也将工作..

cd ~
source .bashrc
于 2014-03-04T13:15:59.070 回答
0

我编写了一组我称为bash_magic的脚本,它可以跨多个 shell 自动执行此过程。如果您更新 bash 魔法 shell 目录中的 shell 文件(.bash.d默认情况下),它将在下一个提示时自动获取更新。因此,一旦您进行了更改,只需点击Enter/return键,任何更新都将被获取。

于 2021-10-06T14:28:44.880 回答