1

我试图在构建过程中将数据附加到 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
4

1 回答 1

0

这里有两个主要问题:

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

    解决方案是在(即时)shell 会话中执行字符串操作,如下所示:
    $(shell echo ${TEXT_STRING} | sed 's/ /_/g')

  2. 带空格的字符串分解成单词列表。printf将它们视为多个变量,每个变量都“消耗”一个%s

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

    这可以通过删除包裹字符串的引号,将 this"${TEXT_STRING}"变为 that 来解决${TEXT_STRING}


最终的解决方案是:

@printf " %-30s %-20s %s\n" $(shell echo ${TEXT_STRING} | sed 's/ /_/g') ${VERSION_NUM} ${TEXT_STRING} >> "$(CURDIR)/debian/my-package/DEBIAN/control"
于 2021-08-18T10:39:48.723 回答