我有一个很长的安装脚本,经常将环境变量插入到 .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
如果您认为需要,也可以从脚本中获取)。