【问题标题】:source ~/.bashrc from bash script does not work来自 bash 脚本的 source ~/.bashrc 不起作用
【发布时间】:2017-03-25 07:01:21
【问题描述】:

我正在尝试创建一个脚本来重新加载 bashrc,但它不起作用。

reloader.sh

#!bin/bash
source ~/.bashrc
rm reloader.sh

【问题讨论】:

  • 您需要使用source 运行脚本。否则它会在子 shell 中运行,.bashrc 所做的更改不会影响你原来的 shell。
  • 如果您想制作一个脚本来将 .bashrc 加载到您当前的 shell(终端中的那个)中,只需从命令行获取,它是需要 .bashrc 的脚本,那么您的代码应该实际工作。从技术上讲,打勾的答案是错误的(无论您想要什么,这都是一种愚蠢的做法),而告诉您更改 shebang 的答案是正确的。你应该更清楚地提出你的问题。

标签: linux bash command-line executable raspberry-pi3


【解决方案1】:

我遇到了同样的问题。问题是只有交互式 shell 才能访问您在 .bashrc(别名等)中定义的任何内容

要使您的 shell 脚本具有交互性,请使用带参数的 shebang:

#!/bin/bash  -i

【讨论】:

    【解决方案2】:

    你需要使用source来运行脚本:

    source reloader.sh
    

    如果您只是将其作为命令运行,它将在新进程中运行,因此.bashrc 所做的任何更改都不会影响您原来的 shell 进程。

    【讨论】:

    • 非常感谢。它在执行 source ~/.bashrc 命令时起作用,但似乎代码忽略了“rm reloader.sh”并且它不断重新加载 bashrc。知道如何解决这个问题吗?我正在从 bashrc 执行这个脚本,作为重新加载 bashrc 一次的一种方式。
    • 为什么在已经加载 bashrc 的时候还需要重新加载 bashrc?
    • 尝试rm reloader.sh时是否出错?
    • 我试图在 bashrc 中打开一个 python 服务器脚本,但它给了我一个绑定错误。但是,如果我关闭终端并重新打开它,服务器就会开始正常工作。所以我想如果我能做点什么来刷新 bashrc,socket 就可以正常工作了。
    • 你确定它会到达那里吗?如果你在它前面加上echo removing reloader.sh,你看到消息了吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2021-06-14
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    相关资源
    最近更新 更多