使用shell脚本导出环境变量
问题描述:
我想使用ksh脚本来设置一些环境变量,我的makefile稍后会使用它。我试图做:使用shell脚本导出环境变量
setup:
. myscript
但它给了我像[[: not found
错误。
有没有办法使用外部脚本加载make的环境变量?
答
你可以在Makefile中change the shell:
SHELL = /usr/bin/ksh # Or whatever path it's at
但它可能是一个好主意,脚本转换为如果你想让它工作的顺利开展一些与/bin/sh
兼容(理想情况下完全POSIX兼容)在其他平台上。
答
请注意,这可能不会按预期工作:由于每个Makefile命令都在其自己的子shell中执行,因此采购myscript
将仅修改本地环境,而不是整个Makefile的一个。
例如:
debug: setup
@echo "*** debug"
export | grep ENVVAR || echo "ENVVAR not found" #(a)
setup:
@echo "*** setup"
export ENVVAR=OK; export | grep ENVVAR || echo "ENVVAR not found" #(b)
export | grep ENVVAR || echo "ENVVAR not found" #(c)
输出:
$ make debug
*** setup
export ENVVAR=OK; export | grep ENVVAR || echo "ENVVAR not found" #(b)
export ENVVAR='OK'
export | grep ENVVAR || echo "ENVVAR not found" #(c)
ENVVAR not found
*** debug
export | grep ENVVAR || echo "ENVVAR not found" #(a)
ENVVAR not found
正如你可以看到,ENVVAR是发现仅在指令(b)中,但命令(a)和(b)以执行新的,干净的环境。