我有以下bash脚本(名为“env.bash”)供源命令使用:
#!/bin/bash
FOO=/some/path
然后我有以下bash脚本(名为“compile.bash”):
#!/bin/bash
if [ -z "$FOO" ]; then
echo "Need to set FOO, did you forget to source env.bash?"
exit 1
fi
./compile-something
但是,如果我这样做:
source env.bash
./compile.bash
我得到“需要设置FOO”,为什么?如果我回复$ FOO,我可以看到它的价值。
答案 0 :(得分:5)
export FOO=/some/path
这应该有效。原因是shell脚本将在子shell中运行,子shell具有自己的环境副本;超级shell的变量通常不可见。执行export
时,您将导出变量的副本可用于子shell。
编辑:删除了不准确之处;另外,非常感谢@DonCallisto。