如何从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
相关产品推荐
相关产品推荐

