Yocto中导出变量不生效,命令结果无法赋值给环境变量如何解决
Yocto配方命令输出赋值环境变量问题解决方案
问题原因
BitBake解析配方时默认会转义普通$符号,你编写的$(cat ...)属于shell命令替换语法,不会被BitBake主动识别执行,只会转义$后保留为字面量字符串;而${WORKDIR}是BitBake内置变量格式,会被BitBake正常解析展开,所以才会出现路径正常替换、cat命令未执行的情况。
解决方案
根据sdk-version.txt的生成时机选择对应写法:
- 若
sdk-version.txt在配方解析阶段就已存在,需要在解析阶段拿到结果,使用BitBake内置的shell扩展语法:export SDK_IMAGE_VERSION = "${@shell('cat ' + d.getVar('WORKDIR', True) + '/sdk-version.txt')}" - 若
sdk-version.txt是在任务执行阶段(比如do_compile、do_install等任务运行过程中)才生成,绝大多数场景都属于这种情况,将赋值逻辑放到对应任务的shell代码块中,用$$代替单个$通知BitBake不需要转义该符号,直接传递给shell处理:do_install:append() { # 这里$$会被BitBake解析为单个$,传给shell后就是正常的命令替换语法 export SDK_IMAGE_VERSION="$$(cat ${WORKDIR}/sdk-version.txt)" # 后续使用SDK_IMAGE_VERSION的业务逻辑 }
内容的提问来源于stack exchange,提问作者md.jamal
相关产品推荐
相关产品推荐

