如何在 debhelper dh_gencontrol 中使用变量?

How to use variables in 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 %s\n" "${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 %s\n" $(shell echo ${TEXT_STRING} | sed 's/ /_/g') ${VERSION_NUM} ${TEXT_STRING} >> "$(CURDIR)/debian/my-package/DEBIAN/control"