如何在 debhelper dh_gencontrol 中使用变量?
How to use variables in debhelper dh_gencontrol?
我试图在构建过程中将数据附加到 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
这里有两个主要问题:
Bash 替换(即 "${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"
我试图在构建过程中将数据附加到 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
这里有两个主要问题:
Bash 替换(即
"${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"