如何在debhelper dh_gencontrol中使用变量?



我试图在构建过程中将数据附加到Debian软件包的描述中。所需的数据存储在debian/rules文件中声明的常量中。

我已经覆盖了dh_gencontrol并添加了@printf调用来格式化数据。

我遇到的问题与包含空格的字符串有关:

  1. printf拆分给定的字符串,将每个单词匹配到%s实例。我希望它使用整个字符串。
  2. 我怎么能操纵说的字符串,用_替换空格,并将其添加到同一行?

debian/rules:

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 %sn" "${TEXT_STRING// /_}" "${VERSION_NUM}" "${TEXT_STRING}" >> "$(CURDIR)/debian/my-package/DEBIAN/control"
预期输出:

<Package description generated by dh_gencontrol>
string_with_data            v11.4               string with data
实际输出:

v11.4               string
with                        data

这里有两个主要问题:

  1. Bash替换(即"${TEXT_STRING// /_}")在make文件中不起作用。

    解决方案是在(动态)shell会话中执行字符串操作,如下所示:
    $(shell echo ${TEXT_STRING} | sed 's/ /_/g')
  2. 带空格的字符串分成单词列表。printf将它们视为多个变量,每个变量都是"消耗"的。单个%s

    这将导致printf添加额外的行,直到打印所有变量。

    这是通过删除字符串的引号来解决的,把这个"${TEXT_STRING}"变成那个${TEXT_STRING}


最终的解决方案是:

@printf " %-30s %-20s %sn" $(shell echo ${TEXT_STRING} | sed 's/ /_/g') ${VERSION_NUM} ${TEXT_STRING} >> "$(CURDIR)/debian/my-package/DEBIAN/control"

相关内容

  • 没有找到相关文章

最新更新