使用shell脚本导出环境变量

使用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)以执行新的,干净的环境。