如果我对.bashrc进行了更改,如何在不注销并重新登录的情况下重新加载它?
当前回答
为了补充和对比两个最流行的答案,.~/。bashrc和exec bash:
两种解决方案都有效地重新加载~/.bashrc,但存在差异:
./.bashrc或source~/.bashrc将保留当前shell会话:除了将~/.bashrc重新加载到当前shell(sourcing)中所做的修改外,当前shell进程及其状态将被保留,其中包括环境变量、shell变量、shell选项、shell函数和命令历史记录。exec bash,或者更有力地说,exec“$bash”[1],将用新实例替换当前shell,因此只保留当前shell的环境变量(包括您在会话中临时定义的环境变量)。换句话说:在shell变量、shell函数、shell选项和命令历史记录方面对当前shell的任何特殊更改都将丢失。
根据您的需要,可以选择一种或另一种方法。
注:上述内容同样适用于其他外壳:
要将exec方法应用于任何默认shell,请使用exec$shell同样,源方法要求您知道并指定特定于shell的初始化文件的名称;例如,对于zsh:.~/。zshrc公司
[1] 理论上,execbash可以执行一个不同于启动当前shell的bash可执行文件,如果它恰好存在于$PATH前面列出的目录中。由于特殊变量$BASH始终包含启动当前shell的可执行文件的完整路径,因此exec“$BASH”保证使用相同的可执行程序。注意$BASH附近的“…”:双引号确保变量值按原样使用,而无需BASH解释;如果该值没有嵌入空格或其他shell元字符(在本例中很可能是这样),则不必严格使用双引号,但使用它们是一个好习惯。
其他回答
根据您的环境,只需键入
bash
也可能起作用。
我在msysgit上使用以下命令
. ~/.bashrc
的较短版本
source ~/.bashrc
根据您的环境,您可能希望添加脚本,以便在打开SSH会话时自动加载.bashrc。我最近迁移到了运行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中的所有路径/脚本。
或者您可以使用:
exec bash
这样做也是一样的,而且更容易记住(至少对我来说)。
exec命令通过运行指定的命令行完全替换shell进程。在我们的示例中,它用一个新的bash实例(用更新的配置文件)替换当前的shell。
我注意到纯exec bash命令将保留环境变量,因此需要使用exec-c bash在空环境中运行bash。
例如,登录一个bash,然后导出a=1,如果执行bash,则a==1。
如果执行-cl bash,则A为空。
我认为这是完成你工作的最佳方式。
推荐文章
- 如何从查找“类型d”中排除此/ current / dot文件夹
- 检查bash变量是否等于0
- 只使用md5sum获取哈希值(没有文件名)
- 如何生成一个核心转储在Linux上的分段错误?
- 使用sh shell比较字符串
- 在Bash中测试非零长度字符串:[-n "$var"]或["$var"]
- 如何删除超过X小时的文件
- (Mac) -bash: __git_ps1:命令未找到
- 如何创建Bash别名?
- 如何设置ssh超时时间?
- 将所有变量从一个shell脚本传递到另一个?
- 只列出UNIX中的目录
- JavaScript硬刷新当前页面
- 如何删除shell脚本中文件名的扩展名?
- 使用xargs调用shell函数