You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Makefile中export导出的变量如何在被调用的Shell脚本中访问

问题根因

Make 对目标下的每一行命令默认都会启动独立的子 Shell 进程执行,不同进程的环境变量互不传递。你第一行执行的 export 命令仅在当前行对应的子 Shell 生效,执行 s.sh 的是全新的子 Shell,自然读取不到变量。

解决方法

你可以选择以下任意一种方案实现变量传递:

  • 方案1:合并命令到同一行执行
    将变量导出和脚本执行放在同一行,让两者在同一个 Shell 进程内运行,修改后的 Makefile 如下:
    all:
        export name="foo" && ./s.sh
    
  • 方案2:在 Make 层面导出变量
    直接使用 Make 的 export 语法定义并导出变量,该变量会被传递到所有命令执行的子 Shell 中,修改后的 Makefile 如下:
    export name = "foo"
    all:
        ./s.sh
    
  • 方案3:使用 .ONESHELL 特殊目标(GNU Make 3.82及以上版本支持)
    声明 .ONESHELL 后,同一个目标下的所有命令会在同一个 Shell 进程中执行,原有写法无需调整即可生效:
    .ONESHELL:
    all:
        export name="foo"
        ./s.sh
    

内容的提问来源于stack exchange,提问作者aryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:54:04