首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在debhelper dh_gencontrol中使用变量?

如何在debhelper dh_gencontrol中使用变量?
EN

Stack Overflow用户
提问于 2021-08-17 16:22:22
回答 1查看 258关注 0票数 1

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

我已经重写了dh_gencontrol,并添加了@printf调用来格式化数据。

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

  1. printf拆分给定的字符串,将每个单词匹配到%s实例。
  2. 如何操作所述字符串,用_替换空格并将其添加到同一行?

来自debian/rules的相关章节

代码语言:javascript
复制
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"

预期产出:

代码语言:javascript
复制
<Package description generated by dh_gencontrol>
 string_with_data            v11.4               string with data

实际产出:

代码语言:javascript
复制
                             v11.4               string
 with                        data
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-18 10:39:48

这里有两个主要问题:

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

解决方案是在(正在运行的) shell会话中执行字符串操作,如下所示:

$(shell echo ${TEXT_STRING} | sed 's/ /_/g')

带有空格的

  1. 字符串分解为单词列表。printf将它们看作是多个变量,如果每个变量“消耗”一个%s

这将导致printf添加附加行,直到打印所有变量为止。

这是通过删除包装字符串的引号来解决的,将这个${TEXT_STRING}.转换为"${TEXT_STRING}"

最后的解决办法是:

代码语言:javascript
复制
@printf " %-30s %-20s %s\n" $(shell echo ${TEXT_STRING} | sed 's/ /_/g') ${VERSION_NUM} ${TEXT_STRING} >> "$(CURDIR)/debian/my-package/DEBIAN/control"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68820886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档