用于在make中导出环境变量的Shell脚本

时间:2012-02-29 16:06:14

标签: shell unix makefile ksh

我想使用ksh脚本来设置我的makefile稍后将使用的一些环境变量。我试着这样做:

setup:
   . myscript

但它给了我[[: not found等错误。

有没有办法使用外部脚本加载make的环境变量?

2 个答案:

答案 0 :(得分:3)

您可以在makefile中使用change the shell

SHELL = /usr/bin/ksh # Or whatever path it's at

但是如果你希望它在其他平台上顺利运行,那么将脚本转换为与/bin/sh兼容的东西(理想情况下完全与POSIX兼容)可能是个好主意。

答案 1 :(得分:0)

请注意,这可能无法按预期工作:因为每个Makefile命令都在其自己的子shell中执行,所以sourcing 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)在新的干净环境中执行。