如何在不注销并重新登录的情况下重新加载 .bashrc 设置?

问:

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

答1:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

您可以输入长格式命令:

source ~/.bashrc

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

. ~/.bashrc

这与登录和退出并不完全相同。假设您在 .bashrc 中有以下行:export PATH=$PATH:foo,然后将其更改为 export PATH=$PATH:bar。如果您登录并退出,则只有 bar 将在 PATH 中,但如果您按照您的建议进行操作,则 foo 和 bar 都将在 PATH 中。你知道解决这个问题的方法吗?

@HighCommander4 - 一种非常不令人满意的方式来做你想做的事情是做“bash -l”,但这实际上创建了一个新的子shell,当你注销时,你将返回到“foo”仍在PATH中的封闭shell。如果您只是对 PATH 感兴趣,您可以执行“取消设置 PATH”并从头开始重建它,但在获取 .bashrc 之前执行“PATH=/bin:/usr/bin”可能更容易/更安全。 PATH 变量是如何在登录时建立的实际上相当复杂,至少涉及来自登录(参见“man login”)和 /etc/profile(参见“man bash”)的输入。

@Alex,您可以通过将 ~/.bashrc 行添加到 ~/.bash_profile 来自动化它,但我不知道这是否是一个好习惯。

我还建议创建一个别名(您可以将其存储在 ~/.bashrc 或 ~/.bash_aliases 中)以打开 .bashrc,并在编辑器退出后重新加载它。您可以通过在别名中组合两个命令来做到这一点,例如像这样(如果 vim 是您的首选编辑器,否则将其换成其他东西):alias editbashrc='vim ~/.bashrc; source ~/.bashrc'。这将使编辑更加顺畅,因为如果使用自定义别名,则在进行编辑后无需考虑重新加载。

它只会影响当前终端。

答2:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

或者你可以使用:

exec bash

这做同样的事情,并且更容易记住(至少对我来说)。

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

你能解释一下source .bashrc命令和exec bash的区别吗?

@muradin,source 是一个内置的 shell 命令,它执行作为参数传递的文件的内容,在当前 shell 中。因此,在您的示例中,它在当前 shell 中执行 .bashrc 文件。并且 exec 命令用给定的程序替换 shell,在你的例子中,它用 bash 替换你的 shell(使用更新的配置文件)

在我非常具体的情况下,这完全震撼了。我的 Dockerfile 执行修改 .bashrc 的安装脚本。然后我需要重新加载它,但 . ~/.bashrc 将在 dash 而不是 bash 中执行,因此由于缺少 shopt 而出现错误。在 shell 中找不到 source,因此该解决方案也已失效。我试过了,docker镜像构建得很顺利!

优雅,但“做同样的事情”并不完全正确。 source ~/.bashrc 将保留您的 整个 shell 环境(尽管可能会被 ~/.bashrc 的来源修改),而 exec bash 将只保留您当前 shell 的 环境变量(任何在 shell 变量、函数、选项方面对当前 shell 的临时更改会丢失)。根据您的需要,可能首选一种或另一种方法。

@SEoF,当你说“bash inception”时,如果你在想我认为你在想的,我必须说你错了。与电影不同的是,当您反复执行 exec bash 时,您不会继续从 bash 进入 bash。 exec 命令用程序(在我们的例子中为 bash)替换 shell。因此,终端中始终存在一个 bash 实例。

答3:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

为了补充和对比两个最受欢迎的答案,. ~/.bashrc 和 exec bash:

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

. ~/.bashrc 或 source ~/.bashrc 将保留您当前的 shell 会话:除了将 ~/.bashrc 重新加载到当前 shell(采购)所做的修改之外,当前 shell 进程及其状态将被保留,其中包括环境变量、shell 变量、shell 选项、shell 函数和命令历史记录。

除了将 ~/.bashrc 重新加载到当前 shell(源)中所做的修改之外,当前 shell 进程及其状态被保留,其中包括环境变量、shell 变量、shell 选项、shell 函数和命令历史记录。

exec bash,或者更强大的 exec “$BASH”[1],将用新实例替换您当前的 shell,因此只保留当前 shell 的环境变量(包括您在会话中临时定义的环境变量) .换句话说:在 shell 变量、shell 函数、shell 选项、命令历史记录方面对当前 shell 的任何临时更改都将丢失。

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

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

注意:上述内容也类似地适用于其他 shell:

要将 exec 方法应用于您的默认 shell,请使用 exec $SHELL

同样,采购方法要求您知道并指定特定于 shell 的初始化文件的名称;例如,对于 zsh: . ~/.zshrc

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

在我问之前你回答了我的问题。很高兴知道这一点;我经常为单个会话设置我的 CLASSPATH。

因此,即使我调用 exec "$BASH" 是否会在我接下来打开的 shell 中找到 .bashrc 设置的变量(使用与当前会话相同的可执行文件)?

@nitinr708:是的,exec $BASH 将获取 ~/.bashrc,因此您将在新会话中看到它对 shell 环境的更改。

这就是我使用 broadcast all + source 的原因。两全其美,imo。

@i_want_more_edits:$SHELL 反映了当前用户的 默认 shell 的任何 shell,它可能是也可能不是 Bash。

答4:

huntsbot.com – 高效赚钱,自由工作

有人编辑了我的答案以添加不正确的英语,但这是原版,不如接受的答案。

. .bashrc

这仅在您的当前目录实际上是您的主目录时才有效。以下将起作用:. ~/.bashrc

什么使这项工作?当我执行“..bashrc”时实际发生了什么?谢谢!

.是“source”内置命令的 BASH 快捷方式。所以“..bashrc”对于 BASH 解释器来说与“source.bashrc”是一样的。

凉爽的。谢谢。现在我不知道。

我刚刚提交了添加 ~/ 的编辑请求,但由于最上面的答案同时显示了 source ~/.bashrc 和 . ~/.bashrc,我想知道这个答案是否应该被删除,因为它是多余的。

答5:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

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

包括您的 .bashrc 文件:

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

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

答6:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

根据您的环境,只需键入

bash

也可以工作。

但是,这会在当前的 shell 中调用一个新的 shell,从而浪费资源。更好地使用@WhoSayln 的exec 解决方案,该解决方案用新调用的shell 替换当前shell。

是的,只需使用来源。这是完全没有必要和烦人的。

除了@BernhardWagner 的评论,如果你生成一个新的 shell,你也会丢失你当前的 bash 历史

这是一个很好的解决方案,用户权限访问受到限制。

调用子流程会增加一层没有附加价值的复杂性。

答7:

huntsbot.com – 高效赚钱,自由工作

. ~/.bashrc

.是 POSIX 强制的内置

备择方案

source ~/.bashrc

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

exec bash

exec 命令用给定的程序替换 shell… – WhoSayIn

exec bash 仍然继承当前 shell 的环境。 exec env -i bash 会更接近(如果您当前在登录 shell 中,exec env -i bash -l 会更接近)。

答8:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

exec bash 是重新执行和启动新 shell 以替换当前 shell 的好方法。只是为了添加答案,$SHELL 返回当前的 shell,即 bash。通过使用以下内容,它将重新加载当前 shell,而不仅仅是 bash。

exec $SHELL -l;

明确说明一下:$SHELL 反映了当前用户的 默认 shell,因此这是一种用用户默认 shell 的新会话替换当前会话(无论它可能是何种 shell 进程)的方法. -l 使新会话成为 login 会话,这适用于 macOS(默认情况下仅加载 ~/.bash_profile,不加载 ~/.bashrc),但不适用于 Linux。

答9:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

我使用 easyengine 设置了基于 vultr 云的服务器。我在 /etc/bash.bashrc 找到了我的 bash 文件。

所以 source /etc/bash.bashrc 帮了我大忙!

更新

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

最好使用 to create a user (with sudo privileges),并改用此用户名登录。这将为您的设置创建一个目录,包括之前资源中所述的 .profile 和 .bashrc 文件。

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

在我的服务器上,它位于 /home/your_username/.bashrc(其中 your_username 实际上是您在上面创建的新用户名,现在登录使用)

答10:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

根据您的环境,您可能希望添加脚本以在您打开 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 中的所有路径/脚本。

我在“.profile”中有这个,但它不起作用 - 每次我退出时,我都必须手动完成。有什么建议么?

答11:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

对我来说,更改 PATH 时有效的是:exec “$BASH” --login

问题是关于重新加载 ~/.bashrc,--login 将不(直接)重新加载;在用户级别,它将重新加载 ~/.bash_profile(或 ~/.bash_login 或 ~/.profile)。

原文链接:https://www.huntsbot.com/qa/XWv5/how-to-reload-bashrc-settings-without-logging-out-and-back-in-again?lang=zh_CN&from=csdn

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值