【问题标题】:Shell script to export environment variables in make在make中导出环境变量的Shell脚本
【发布时间】:2024-11-25 22:35:01
【问题描述】:

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

setup:
   . myscript

但它给了我[[: not found之类的错误。

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

【问题讨论】:

    标签: shell unix makefile ksh


    【解决方案1】:

    你可以在makefile中使用change the shell

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】: