如果我对.bashrc进行更改,如何在不注销并返回的情况下重新加载它?
.bashrc
有人编辑了我的答案,添加了不正确的英语,但这是原始的,这比公认的答案要差。
. .bashrc
您可以输入长格式命令:
source ~/.bashrc
或者您可以使用命令的较短版本:
. ~/.bashrc
或者您可以使用:
exec bash
这是一样的,更容易记住(至少对我来说)。
exec命令通过运行指定的命令行完全替换shell进程。在我们的示例中,它将当前shell替换为bash的新实例(使用更新的配置文件)。
exec
bash
根据您的环境,只需输入
也可以工作。
这也将工作。
cd ~source .bashrc
我在msysgit上使用以下命令
较短版本的
补足和对比两个最受欢迎的答案,#0和#1:
两个解决方案有效重新加载~/.bashrc,但存在差异:
~/.bashrc
. ~/.bashrc或source ~/.bashrc将保留当前的shell会话:
exec bash,或者更有力地说,exec "$BASH"[1],将替换您当前的shell与一个新实例,因此只保留当前shell的环境变量(包括您定义的即席,会话中的实例)。
exec "$BASH"
根据您的需求,一种或另一种方法可能是首选。
注意:上述情况也类似于其他炮弹:
exec $SHELL
zsh
. ~/.zshrc
[1]exec bash理论上可以执行不同bash的可执行文件,而不是启动当前shell的可执行文件,如果它恰好存在于$PATH前面列出的目录中。由于特殊变量$BASH总是包含启动当前shell的可执行文件的完整路径,因此exec "$BASH"可以保证使用相同的可执行文件。关于$BASH的注释"...":双引号确保变量值按原样使用,不需要Bash解释;如果值没有嵌入空格或其他shell元字符(在这种情况下很可能),您不需要严格使用双引号,但使用它们是形成的好习惯。
$PATH
$BASH
"..."
有了这个,你不会甚至必须输入“source~/. bashrc”:
包含您的bashrc文件:
alias rc="vim ~/.bashrc && source ~/.bashrc"
每次要编辑bashrc时,只需运行别名“rc”
.是POSIX强制内置的
.
source是bash中的点/句点.的同义词,但在POSIX sh中不是,因此为了最大的兼容性,请使用句点。
source
exec命令替换shell与给定的程序…-WhoSayIn
我注意到纯exec bash命令将保留环境变量,因此您需要使用exec -c bash在空环境中运行bash。
exec -c bash
例如,您登录一个bash,如果您登录exec bash,则登录export A=1。
export A=1
如果exec -cl bash,则A为空。
exec -cl bash
A
我认为这是做你工作的最好方法。
对我来说,当我改变PATH时,有效的方法是:exec "$BASH" --login
exec "$BASH" --login
根据您的环境,您可能希望添加脚本,以便在打开SSH会话时自动加载.bashrc。我最近迁移到运行Ubuntu的服务器,默认情况下加载.profile,而不是.bashrc或.bash_profile。要在.bashrc中运行任何脚本,每次打开会话时我都必须运行source ~/.bashrc,这在运行远程部署时没有帮助。
.profile
.bash_profile
要在打开会话时自动加载.bashrc,请尝试将其添加到.profile:
if [ -n "$BASH_VERSION" ]; then# include .bashrc if it existsif [ -f "$HOME/.bashrc" ]; then. "$HOME/.bashrc"fifi
重新打开您的会话,它应该加载您在.bashrc中拥有的任何路径/脚本。
我使用easyEngine来设置我的基于云的服务器。我在/etc/bash.bashrc找到了我的bash文件。
/etc/bash.bashrc
所以source /etc/bash.bashrc为我做了这个把戏!
source /etc/bash.bashrc
更新
设置裸服务器(ubuntu 16.04)时,当您尚未设置用户名并通过root登录时,您可以使用上述信息。
最好是创建用户(具有sudo权限),并以此用户名登录。这将为您的设置创建一个目录,包括上一个资源中描述的.profile和.bashrc文件。
现在,您将编辑和(和source)~/.bashrc文件。
在我的服务器上,它位于/home/your_username/.bashrc(其中your_username实际上是您在上面创建的新用户名,现在用它登录)
/home/your_username/.bashrc
your_username
假设一个交互式shell,你想保留当前的命令历史记录并加载 /etc/profile(它加载环境数据,包括 /etc/bashrc,在Mac OS X上加载 /etc/paths.d/viapath_helper中定义的路径),附加你的命令历史记录并使用登录('-l')选项执行bash:
history -a && exec bash -l
exec bash是重新执行并启动新shell以替换当前的好方法。只是为了增加答案,$SHELL返回当前shell是bash。通过使用以下内容,它将重新加载当前shell,而不仅仅是bash。
$SHELL
exec $SHELL -l;
我写了一组我称之为bash_magic的脚本,它在许多shell中自动执行此过程。如果您更新bash魔术shell目录中的shell文件(默认为.bash.d),它将在下一个提示符处自动获取更新。因此,一旦您进行了更改,只需按下Enter/return键,任何更新都将被获取。
.bash.d
Enter
return
我知道你想要一个shell,因为在注销和再次登录之后。最好的方法是:
exec env -i HOME="$HOME" "$SHELL" -l
env将创建一个新的空环境,-i我们添加$HOME,以便$SHELL给出的shell(通常是bash)可以找到~/.profile/~/.bash_profile(因此(在ubuntu或指定的情况下)~/.bashrc)。这些将由-l提供。但我不完全确定。
env
-i
$HOME
~/.profile
~/.bash_profile
-l