如何在debhelper dh_gencontrol中使用变量追加Debian包描述信息
问题根因
- Makefile的变量定义不需要引号标记字符串边界,你写的
TEXT_STRING = "string with data"会把双引号也纳入变量值,传递给shell后引号被解析,导致字符串被拆分为多个独立参数 - 你使用的
${TEXT_STRING// /_}是Bash专属的参数替换语法,而Make默认调用/bin/sh执行规则内的命令,大部分Debian系统的默认sh是dash,不支持该语法,空格替换未生效进一步加剧了参数拆分问题
解决方法
- 修改变量定义,去掉多余的双引号,直接赋值带空格的字符串即可
- 用Make原生的字符串替换函数
subst完成空格转下划线的操作,不依赖shell类型兼容性更好 - 给printf的每个参数外层加单引号,确保shell把整个字符串识别为单个参数,不会按空格拆分
修改后的完整代码段
TEXT_STRING = string with data VERSION_NUM = v11.4 ... ... override_dh_gencontrol: dh_gencontrol @echo "Adding versions to debian/control file" # This one writes to console @printf ' %-30s %-20s %s\n' '$(subst ,_,$(TEXT_STRING))' '$(VERSION_NUM)' '$(TEXT_STRING)' >> "$(CURDIR)/debian/my-package/DEBIAN/control"
补充说明
如果你的TEXT_STRING中本身包含单引号,可以在变量引用时增加转义处理:$(subst ','\'',$(TEXT_STRING)),避免单引号提前闭合导致shell解析错误。
内容的提问来源于stack exchange,提问作者Ezekiel
相关产品推荐
相关产品推荐

