在构建过程中,我试图将数据添加到Debian包的描述中。所需数据存储在debian/rules文件中声明的常量中。
我已经重写了dh_gencontrol,并添加了@printf调用来格式化数据。
我遇到的问题与包含空格的字符串有关:
printf拆分给定的字符串,将每个单词匹配到%s实例。_替换空格并将其添加到同一行?
来自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发布于 2021-08-18 10:39:48
这里有两个主要问题:
"${TEXT_STRING// /_}")在make文件中不工作。解决方案是在(正在运行的) shell会话中执行字符串操作,如下所示:
$(shell echo ${TEXT_STRING} | sed 's/ /_/g')
带有空格的
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"https://stackoverflow.com/questions/68820886
复制相似问题