在脚本中获取 .bashrc 不会更新环境变量

在脚本中获取 .bashrc 不会更新环境变量

我有一个很长的安装脚本,经常将环境变量插入到 .bashrc 中以供立即和将来使用,然后使用源.bashrc来更新环境变量。然而,这并没有按预期工作。与在终端中独立运行时不同,作为脚本一起运行这些命令无法更新当前环境。

这是一个小例子:

echo export TEST_BASH=sup >> ~/.bashrc
source ~/.bashrc
echo $TEST_BASH

最后一行将打印空而不是预期的“sup”。这是为什么?

答案1

您的~/.bashrc文件会检测它是否由交互式 shell 或非交互式 shell 获取:

case $- in
    *i*) ;;
    *) return ;;
esac

当此文件源自脚本(非交互式 shell)时,return将采用分支并且文件不会执行到最后。

将语句添加export到文件末尾意味着这些语句在源自脚本时不会被执行。

解决方案可能是将export语句写入一个单独的文件,并从脚本中获取该文件(~/.bashrc如果您认为需要,也可以从脚本中获取)。

相关内容