我们有一个名为source.sh的shell脚本,它导出了构建所需的许多ENV变量。
我试图通过在我的脚本中运行source.sh来访问这些ENV变量,但即使在运行之后我也无法访问后续命令的ENV变量。
我的脚本看起来很像:
#!/bin/bash
sh source.sh
cd $ROOT_VOS
make
但这里没有发生cd $ ROOT_VOS
答案 0 :(得分:2)
sh source.sh
...在source.sh
的单独副本中运行sh
(实际上,由于您的父shell为bash
且孩子为sh
,因此它不仅仅是“单独的副本“,这是一个完全不同的翻译)。当单独的解释器退出时,局部变量和对进程本地状态的其他更改都消失了。 (环境变量由子进程继承;它们不会在树中传播给父级)。
相反,请使用:
# POSIX-compliant: execute every command in source.sh in the current shell
. source.sh
...或...
# bash-specific, perhaps more-readable, synonym for the same
source source.sh