如果我对.bashrc进行了更改,如何在不注销并重新登录的情况下重新加载它?
当前回答
或者您可以使用:
exec bash
这样做也是一样的,而且更容易记住(至少对我来说)。
exec命令通过运行指定的命令行完全替换shell进程。在我们的示例中,它用一个新的bash实例(用更新的配置文件)替换当前的shell。
其他回答
我知道你想要一个shell,因为在注销并再次登录后。我认为实现这一目标的最佳方式是:
exec env -i HOME="$HOME" "$SHELL" -l
exec将替换当前的shell,这样当新的shell退出时就不会剩下它了。env将创建一个新的空环境,使用-i,我们添加$HOME,这样$shell提供的shell(通常是bash)可以找到~/.profile/~/.bash_profile(因此(在ubuntu上或如果指定)~/.bash rc)。不过我不完全确定。
execbash是重新执行和启动新shell以替换当前shell的好方法。为了补充答案,$SHELL返回当前的SHELL,即bash。通过使用以下命令,它将重新加载当前shell,而不仅仅是bash。
exec $SHELL -l;
有人编辑了我的答案,添加了不正确的英语,但这是原文,比公认的答案差。
. .bashrc
请注意,$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]+ //'
但请阅读以上所有建议就我个人而言,我不喜欢泄露历史。。。但这取决于你和你的需要
我注意到纯exec bash命令将保留环境变量,因此需要使用exec-c bash在空环境中运行bash。
例如,登录一个bash,然后导出a=1,如果执行bash,则a==1。
如果执行-cl bash,则A为空。
我认为这是完成你工作的最佳方式。
推荐文章
- 安装tzdata非交互式
- 如何从终端/命令行调用VS代码编辑器
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 在Bash中检查变量是否存在于列表中
- 查看PS命令的全部输出
- 确保一次只运行一个shell脚本实例的快速方法
- 如何在Windows命令提示符下运行.sh ?
- “你有邮件”的消息在终端,os X
- 如何从命令行将每两行合并为一行?
- 如何复制在bash所有目录和文件递归?
- 在Bash命令提示符上添加git分支
- 匹配前后的Grep字符?
- 如何在Makefile中设置子进程的环境变量
- 带有多个条件的Bash if语句将抛出错误
- 如何让“wc -l”打印没有文件名的行数?