如何重新加载. bashrc设置而不注销并再次返回?

如果我对.bashrc进行更改,如何在不注销并返回的情况下重新加载它?

1455297 次浏览

有人编辑了我的答案,添加了不正确的英语,但这是原始的,这比公认的答案要差。

. .bashrc

您可以输入长格式命令:

source ~/.bashrc

或者您可以使用命令的较短版本:

. ~/.bashrc

或者您可以使用:

exec bash

这是一样的,更容易记住(至少对我来说)。

exec命令通过运行指定的命令行完全替换shell进程。在我们的示例中,它将当前shell替换为bash的新实例(使用更新的配置文件)。

根据您的环境,只需输入

bash

也可以工作。

这也将工作。

cd ~source .bashrc

我在msysgit上使用以下命令

. ~/.bashrc

较短版本的

source ~/.bashrc

补足和对比两个最受欢迎的答案,#0#1

两个解决方案有效重新加载~/.bashrc,但存在差异:

  • . ~/.bashrcsource ~/.bashrc保留当前的shell会话

    • 除了将~/.bashrc重新加载到当前shell(采购)所做的修改之外,当前shell进程及其状态被保存包括环境变量、shell变量、shell选项、shell函数和命令历史记录。
  • exec bash,或者更有力地说,exec "$BASH"[1],将替换您当前的shell与一个新实例,因此保留当前shell的环境变量(包括您定义的即席,会话中的实例)。

    • 换句话说:在shell变量、shell函数、shell选项、命令历史记录方面对当前shell的任何即席更改都会丢失。

根据您的需求,一种或另一种方法可能是首选。


注意:上述情况也类似于其他炮弹

  • 要将exec方法应用于不管你的默认shell是什么,请使用exec $SHELL
  • 类似地,源方法要求您知道并指定特定于shell的初始化文件的名称;例如,对于zsh. ~/.zshrc

[1]exec bash理论上可以执行不同bash的可执行文件,而不是启动当前shell的可执行文件,如果它恰好存在于$PATH前面列出的目录中。由于特殊变量$BASH总是包含启动当前shell的可执行文件的完整路径,因此exec "$BASH"可以保证使用相同的可执行文件。
关于$BASH的注释"...":双引号确保变量值按原样使用,不需要Bash解释;如果值没有嵌入空格或其他shell元字符(在这种情况下很可能),您不需要严格使用双引号,但使用它们是形成的好习惯。

有了这个,你不会甚至必须输入“source~/. bashrc”:

包含您的bashrc文件:

alias rc="vim ~/.bashrc && source ~/.bashrc"

每次要编辑bashrc时,只需运行别名“rc

. ~/.bashrc

.是POSIX强制内置的


替代品

source ~/.bashrc

source是bash中的点/句点.的同义词,但在POSIX sh中不是,因此为了最大的兼容性,请使用句点。

exec bash
  • exec命令替换shell与给定的程序…-WhoSayIn

我注意到纯exec bash命令将保留环境变量,因此您需要使用exec -c bash在空环境中运行bash。

例如,您登录一个bash,如果您登录exec bash,则登录export A=1

如果exec -cl bash,则A为空。

我认为这是做你工作的最好方法。

对我来说,当我改变PATH时,有效的方法是:exec "$BASH" --login

根据您的环境,您可能希望添加脚本,以便在打开SSH会话时自动加载.bashrc。我最近迁移到运行Ubuntu的服务器,默认情况下加载.profile,而不是.bashrc.bash_profile。要在.bashrc中运行任何脚本,每次打开会话时我都必须运行source ~/.bashrc,这在运行远程部署时没有帮助。

要在打开会话时自动加载.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文件。

所以source /etc/bash.bashrc为我做了这个把戏!

更新

设置裸服务器(ubuntu 16.04)时,当您尚未设置用户名并通过root登录时,您可以使用上述信息。

最好是创建用户(具有sudo权限),并以此用户名登录。
这将为您的设置创建一个目录,包括上一个资源中描述的.profile.bashrc文件。

现在,您将编辑和(和source~/.bashrc文件。

在我的服务器上,它位于/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。

exec $SHELL -l;

我写了一组我称之为bash_magic的脚本,它在许多shell中自动执行此过程。如果您更新bash魔术shell目录中的shell文件(默认为.bash.d),它将在下一个提示符处自动获取更新。因此,一旦您进行了更改,只需按下Enter/return键,任何更新都将被获取。

我知道你想要一个shell,因为在注销和再次登录之后。最好的方法是:

exec env -i HOME="$HOME" "$SHELL" -l

env将创建一个新的空环境,-i我们添加$HOME,以便$SHELL给出的shell(通常是bash)可以找到~/.profile/~/.bash_profile(因此(在ubuntu或指定的情况下)~/.bashrc)。这些将由-l提供。但我不完全确定。