Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于在make中导出环境变量的Shell脚本_Shell_Unix_Makefile_Ksh - Fatal编程技术网

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

用于在make中导出环境变量的Shell脚本,shell,unix,makefile,ksh,Shell,Unix,Makefile,Ksh,我想使用ksh脚本来设置一些环境变量,我的makefile稍后将使用这些变量。我试着做: setup: . myscript 但是它会给我一些错误,比如[:notfound 有没有办法使用外部脚本加载make的环境变量?您可以在make文件中使用: SHELL = /usr/bin/ksh # Or whatever path it's at 但是将脚本转换为与/bin/sh兼容的脚本可能是个好主意(理想情况下完全兼容POSIX)如果您希望它在其他平台上顺利运行。请注意,这可能无法按预

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

setup:
   . myscript
但是它会给我一些错误,比如
[:notfound

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

您可以在make文件中使用:

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

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

请注意,这可能无法按预期工作:由于每个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)是在新的干净环境中执行的