如果我修改了.bashrc
文件,如何在不注销并重新登录的情况下重新加载它?
当我改变PATH时,对我有效的方法是:exec "$BASH" --login
注意$SHELL可能会产生意外的结果,例如在Docker环境中连接时。
echo $SHELL
/usr/sbin/nologin
所以如果你尝试,你将会被断开连接
exec $SHELL
This account is currently not available.
所以你可能需要使用更复杂的内容,比如
exec $(pgrep -l sh | grep "^`echo $$` " | cut -d" " -f2)
假设每个 shell 都包含 "sh",并且这个命令管道
pgrep -l sh | grep "^`echo $$` " | cut -d" " -f2
生成完整的命令
如果您有参数或标志,您可能需要使用-f2,3,4
或尝试
pgrep -l sh | grep "^`echo $$` " | sed -E 's/^[0-9]+ //'
但是请阅读上面的所有建议
个人而言,我不喜欢丢失Shell历史记录...但这取决于您和您的需求
. ~/.bashrc
缩写版的
source ~/.bashrc
我理解您想要在注销并重新登录后拥有一个shell。我认为最好的实现方式是:
exec env -i HOME="$HOME" "$SHELL" -l
exec
会替换当前的shell,因此当新的shell退出时,你不会留下它。 env
将创建一个新的空环境,使用 -i
我们添加了 $HOME
,这样你的shell(通常是bash)可以找到 ~/.profile
/~/.bash_profile
(在ubuntu上或者指定的情况下还有~/.bashrc
)。由于 -l
,这些文件将被引用。但我并不完全确定。
假设您正在使用交互式shell,且希望保留当前命令历史记录并加载/etc/profile(其中包括环境数据和在Mac OS X上通过path_helper定义的/ etc/paths.d/路径),请附加您的命令历史记录并执行bash,使用登录('-l')选项:
history -a && exec bash -l
exec bash
命令将保留环境变量,因此您需要使用exec -c bash
以在空环境中运行bash。export A=1
,如果您exec bash
,则A == 1
。exec -cl bash
,A
为空。exec -c
和 exec -cl
是一样的吗? - i_want_more_edits这样也可以运行。
cd ~
source .bashrc
~
? - Kenly.bash.d
)中更新了一个shell文件,则它将在下一个提示符处自动源更新。因此,一旦您进行更改,只需按下Enter
/return
键,任何更新都将被源。
~/.bashrc
的,使用--login
选项将 不会 (直接)重新加载;在用户级别上,它将重新加载~/.bash_profile
(或~/.bash_login
或~/.profile
)。 - mklement0