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

How do I reload .bashrc without logging out and back in?

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


您只需输入命令:

1
source ~/.bashrc

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

1
. ~/.bashrc


或者你可以使用;

1
exec bash

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

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


为了补充和对比两个最流行的答案,. ~/.bashrcexec bash

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

  • . ~/.bashrcsource ~/.bashrc将保留您当前的外壳:

    • 除了将~/.bashrc重新加载到当前shell(sourcing)中所做的修改外,还保留了当前shell及其状态,其中包括环境变量、shell变量、shell选项、shell函数和命令历史记录。
  • exec bash,或者更坚固地说,exec"$BASH"1,将用新实例替换当前shell,因此只保留当前shell的环境变量(包括已定义的特殊环境变量)。

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

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

[1]exec bash理论上可以执行不同于启动当前shell的bash可执行文件,前提是它恰好存在于$PATH中前面列出的目录中。由于特殊变量$BASH总是包含启动当前shell的可执行文件的完整路径,因此exec"$BASH"保证使用相同的可执行文件。关于$BASH的注释:双引号确保变量值按原样使用,而不需要bash解释;如果值没有嵌入空格或其他shell元字符(在这种情况下不太可能),则不需要严格使用双引号,但使用双引号是一个很好的习惯。


有人编辑了我的答案,添加了不正确的英语,但这里是原文,这比公认的答案差。

1
. .bashrc


根据您的环境,只需键入

1
bash

也可以工作。


有了这个,您甚至不必键入"source~/.bashrc":

包括您的bashrc文件:

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

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


1
. ~/.bashrc

. is a POSIX-mandated builtin

选择

1
source ~/.bashrc

source is a synonym for dot/period . in bash, but not in POSIX sh, so for maximum compatibility use the period.

1
exec bash
  • exec command replaces the shell with a given program... – WhoSayIn


根据您的环境,您可能希望在打开ssh会话时添加脚本以自动加载.bashrc。我最近迁移到一个运行Ubuntu的服务器上,默认情况下会加载.profile,而不是.bashrc或.bash_profile。要在.bashrc中运行任何脚本,我必须在每次打开会话时运行source ~/.bashrc,这在运行远程部署时没有帮助。

若要在打开会话时自动加载.bashrc,请尝试将其添加到.profile:

1
2
3
4
5
6
if [ -n"$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f"$HOME/.bashrc" ]; then
        ."$HOME/.bashrc"
    fi
fi

重新打开您的会话,它应该加载您在.bashrc中拥有的任何路径/脚本。


对我来说,当我改变道路时,能起作用的是:exec"$BASH" --login


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

所以以东克十一〔一〕给了我诡计!

更新

当设置一个裸机服务器(Ubuntu16.04)时,您可以使用上面的信息,当您还没有设置用户名,并且通过根用户登录时。

最好创建一个用户(具有sudo特权),然后以这个用户名登录。这将为您的设置创建一个目录,包括.profile和.bashrc文件。https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/

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

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


类型:

source ~/.bashrc

或者,以较短的形式:

. ~/.bashrc


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

1
history -a && exec bash -l

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

例如,登录bash和export A=1,如果您是exec bashA == 1

如果你是exec -cl bashA是空的。

我认为这是完成你工作的最好方法。


这也可以。

1
2
cd ~
source .bashrc


我在msysgit上使用以下命令

1
. ~/.bashrc

较短版本的

1
source ~/.bashrc


我个人有

alias ..='source ~/.bashrc'

在我的bashrc中,这样我就可以使用"…"来重新加载它。