如果我对.bashrc进行了更改,如何在不注销并重新登录的情况下重新加载它?
当前回答
我知道你想要一个shell,因为在注销并再次登录后。我认为实现这一目标的最佳方式是:
exec env -i HOME="$HOME" "$SHELL" -l
exec将替换当前的shell,这样当新的shell退出时就不会剩下它了。env将创建一个新的空环境,使用-i,我们添加$HOME,这样$shell提供的shell(通常是bash)可以找到~/.profile/~/.bash_profile(因此(在ubuntu上或如果指定)~/.bash rc)。不过我不完全确定。
其他回答
为了补充和对比两个最流行的答案,.~/。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元字符(在本例中很可能是这样),则不必严格使用双引号,但使用它们是一个好习惯。
我在msysgit上使用以下命令
. ~/.bashrc
的较短版本
source ~/.bashrc
这也会奏效。。
cd ~
source .bashrc
这样,您甚至不必键入“source~/.bashrc”:
包括bashrc文件:
alias rc="vim ~/.bashrc && source ~/.bashrc"
每次您想编辑bashrc时,只需运行别名“rc”
假设是一个交互式shell,并且您希望保留当前的命令历史记录并加载/etc/profile(它加载环境数据,包括/etc/bashrc,在Mac OS X上,通过path_helper加载/etc/paths.d/中定义的路径),附加命令历史记录,并使用login('-l')选项执行bash:
history -a && exec bash -l
推荐文章
- bash:错误的替换
- 如何在bash中删除字符后的所有文本?
- 如何配置git bash命令行补全?
- Shell脚本:在Shell脚本中执行python程序
- /bin/sh: apt-get:未找到
- Git在终端提交时打开VIM,但无法返回终端
- 如何检索给定相对的绝对路径
- 如何在shell管道中使用“jq”?
- 如何使用jq从JSON获得键名
- 图形化对?
- 我如何能匹配一个字符串与正则表达式在Bash?
- 为什么cURL返回错误“(23)Failed writing body”?
- 在Unix shell中计算一列数字
- 在bash脚本中否定if条件
- 如何撤消“set -e”使bash立即退出,如果任何命令失败?