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

如何从Fastlane设置环境变量并传递给调用它的Bash脚本?

解决Fastlane向调用它的Bash脚本传递值的问题

为什么原来的方法无效

你用sh(command: 'export DELIVER_USER=joe')设置环境变量没用,是因为Fastlane执行sh命令时会启动一个独立的子shell,这个子shell里的环境变量只在自身生命周期内有效,根本传不到调用Fastlane的父Bash脚本里。

可行的解决方案

方案1:通过标准输出传递键值对,脚本捕获后执行

在Fastlane的lane里直接输出键值对格式的内容,然后在Bash脚本里用eval把输出转换成当前shell的环境变量。

Fastlane lane代码:

lane :beta do
  # 这里写你的其他打包逻辑
  puts "DELIVER_USER=joe" # 输出要传递的变量
end

Bash脚本修改:

#!/bin/sh
# 捕获fastlane输出中包含DELIVER_USER的行,用eval执行
eval $(fastlane beta | grep "DELIVER_USER=")
echo $DELIVER_USER # 现在能输出joe了

方案2:写入临时文件,脚本读取后加载

把要传递的变量写入临时文件,脚本执行完Fastlane后读取文件内容并加载。

Fastlane lane代码:

lane :beta do
  # 其他逻辑
  # 写入临时文件,可自定义路径
  File.write("/tmp/fastlane_temp_vars", "DELIVER_USER=joe")
end

Bash脚本修改:

#!/bin/sh
fastlane beta
# 读取临时文件内容并执行,加载变量
eval $(cat /tmp/fastlane_temp_vars)
echo $DELIVER_USER
# 可选:用完删除临时文件,避免残留
rm /tmp/fastlane_temp_vars

方案3:直接返回单个值,脚本捕获输出

如果只需要传递单个值,让Fastlane的lane返回该值,脚本直接捕获输出(注意要确保Fastlane没有其他无关输出,否则需要过滤)。

Fastlane lane代码:

lane :beta do
  # 其他逻辑
  return "joe"
end

Bash脚本修改:

#!/bin/sh
# 直接捕获fastlane的输出作为变量值
DELIVER_USER=$(fastlane beta)
echo $DELIVER_USER

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:25:01