如果我修改了.bashrc
文件,如何在不注销并重新登录的情况下重新加载它?
您可以输入完整的命令:
source ~/.bashrc
或者您可以使用该命令的简短版本:
. ~/.bashrc
或者你可以使用:
exec bash
这样做的效果是一样的,而且更容易记住(至少对我来说是这样)。
exec
命令通过运行指定的命令行完全替换了 shell 进程。在我们的示例中,它使用更新的配置文件将当前的 shell 替换为一个新的 bash
实例。
source .bashrc
命令和 exec bash
命令的区别吗? source .bashrc
会读取当前用户主目录下的 .bashrc
文件,并将其中的命令执行,这些命令通常是设置环境变量、别名和函数等。exec bash
会启动一个新的 Bash shell,并替换当前 shell 进程。这个新的 shell 会继承当前 shell 的环境变量、别名和函数等设置,但不会执行 .bashrc
文件中的命令。dash
而不是bash
中执行. ~/.bashrc
命令会出现错误,因为缺少shopt
。由于shell中找不到source
命令,所以这个解决方法也不行。我尝试了这个方法后,Docker镜像构建很顺利! - m59source ~/.bashrc
将保留您的 整个 shell 环境(虽然可能会因为 ~/.bashrc
的源代码而被修改),而 exec bash
只会保留当前 shell 的 _环境变量_(任何针对当前 shell 的临时更改,如 shell 变量、函数、选项都会丢失)。根据您的需要,可以选择其中一种方法。 - mklement0exec bash
命令时,并不会像电影中那样不断地从bash进入到bash。在我们的情况下,exec
命令会用程序(即bash)替换 shell。因此,在终端中始终存在一个bash实例。 - John Red. ~/.bashrc
和exec bash
:~/.bashrc
,但存在差异:. ~/.bashrc
或source ~/.bashrc
将保留您当前的 shell 会话:
除了重新加载(sourcing)~/.bashrc
所做的修改之外,保留了当前 shell 进程及其状态,包括环境变量、shell 变量、shell 选项、shell 函数和命令历史记录。exec bash
或更稳健的方法是exec "$BASH"
[1], 将用新实例替换您当前的 shell,因此只保留您当前 shell 的环境变量(包括您在会话中定义的临时变量)。
也就是说,在当前 shell 中进行过的任何临时更改,如 shell 变量、shell 函数、shell 选项和命令历史记录都将丢失。exec
应用于您的默认 shell ,请使用exec $SHELL
- 同样,sourcing 方法要求您知道并指定 shell 特定的初始化文件的名称;例如,对于 zsh
:. ~/.zshrc
。
[1] exec bash
理论上可以执行一个不同于启动当前shell的可执行文件,如果它恰好存在于$PATH
中较早列出的目录中。由于特殊变量$BASH
始终包含启动当前shell的可执行文件的完整路径,因此exec "$BASH"
保证使用相同的可执行文件。
关于"..."
和$BASH
的注意事项:双引号确保变量值原样使用,而不是Bash解释;如果该值没有嵌入空格或其他shell元字符(在这种情况下很可能),您不严格需要双引号,但使用它们是一个好习惯。
exec $BASH
会加载~/.bashrc
文件,因此在新的会话中,您将看到对shell环境所做的更改。 - mklement0broadcast all
+ source。在我看来,这是最好的两全其美的选择。 - Nate T/path/to/different/executable/bash
,$BASH
将包含该路径,而 $SHELL
则不会在意并包含默认 shell,对吗? - i_want_more_edits有人编辑了我的答案,添加了错误的英语,但这是原始答案,比被接受的答案差。
. .bashrc
~/
,但由于最佳答案同时显示了 source ~/.bashrc
和 . ~/.bashrc
,所以我想知道是否应该删除这个答案,因为它是多余的。 - Max Ghenis有了这个,你甚至不需要输入“source ~/.bashrc”:
将你的bashrc文件包含进来:
alias rc="vim ~/.bashrc && source ~/.bashrc"
每次您想编辑您的bashrc时,只需运行别名 "rc"
根据您的环境,只需键入
bash
也可能有效。
. ~/.bashrc
source ~/.bashrc
exec bash
exec
命令用给定的程序替换了 Shell ... - WhoSayIn
exec bash
仍然继承当前 shell 的环境变量。使用 exec env -i bash
可以更接近期望效果(如果您当前在登录 shell 中,则可以使用 exec env -i bash -l
)。 - chepnerexec bash
是一个很好的重新执行并启动一个新的shell来替换当前shell的方法。只是为了补充答案,$SHELL
返回当前的shell,即bash。通过使用以下命令,可以重新加载当前shell,而不仅仅是bash。
exec $SHELL -l;
$SHELL
反映了当前用户的默认 shell,因此这是用用户的默认 shell 替换当前会话的一种方法 - 无论它可能是哪个 shell 的进程。 -l
使新会话成为“登录”会话,在 macOS 上是适当的(默认只加载 ~/.bash_profile
,而不是 ~/.bashrc
),但在 Linux 上不是。 - mklement0/etc/bash.bashrc
发现了我的bash文件。source /etc/bash.bashrc
对我很有帮助!.profile
和.bashrc
文件。source
)~/.bashrc
文件。/home/your_username/.bashrc
your_username
实际上是您上面创建的新用户名,并且现在使用该用户名登录).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
文件中有以下一行代码:export PATH=$PATH:foo
,然后你把它改成了export PATH=$PATH:bar
。如果你登录后退出,只有bar
会在环境变量PATH
中,但是如果按照你建议的做法,foo
和bar
都会在PATH
中。你知道有什么解决方法吗? - HighCommander4/.bashrc”添加到“/.bash_profile”中来自动化它,但我不知道这是否是一个好的做法。 - Vivek Gani/.bashrc或/.bash_aliases中),用它打开.bashrc,并在编辑器退出后重新加载它。你可以通过结合两个命令来创建别名,比如这样(如果vim是你喜欢的编辑器,否则更换成其他编辑器):alias editbashrc='vim ~/.bashrc; source ~/.bashrc'
。使用这个自定义别名编辑更加流畅,因为不需要考虑在编辑后重新加载文件。 - Samuel Lampa