【问题标题】:m4 macro and shell redirectionm4 宏和 shell 重定向
【发布时间】:2020-08-11 17:26:57
【问题描述】:

m4 宏可以重定向输出到带有 shell $(...) 的变量吗?变量$MANPAGE_DOCBOOK_XSL 为空:(。

if test "x${XMLCATALOG}" != "x" -a "x$have_xmlcatalog_file" = "xyes"; then
    DOCBOOK_XSL_URI="http://docbook.sourceforge.net/release/xsl/current"
    DOCBOOK_XSL_PATH="manpages/docbook.xsl"
    MANPAGE_DOCBOOK_XSL=$(${XMLCATALOG} ${XML_CATALOG_FILE} ${DOCBOOK_XSL_URI}/${DOCBOOK_XSL_PATH} | sed -n 's|^file:/\+|/|p;q')
fi

https://github.com/pevik/ima-evm-utils/blob/master/m4/manpage-docbook-xsl.m4#L22

查看Wayland中的类似代码,他们只是检查命令是否有效(是否可以找到目录),而不是检查值。

https://github.com/wayland-project/wayland/blob/master/configure.ac#L167

【问题讨论】:

  • m4宏是什么?您提供的所有内容看起来都像是直接的 shell 代码。
  • 查看链接:github.com/pevik/ima-evm-utils/blob/master/m4/…。这就是问题:m4 宏是否正确?我认为可以在 m4 宏中使用 shell。
  • 我不明白你的顾虑是什么。 m4 是一种宏语言。说它通过扩展它在其中找到的宏将输入转换为输出并不太简单。 m4 不关心其输出对其他软件或系统的重要性。
  • 您对相关代码有什么困难吗?
  • 无论如何,关于引导问题,m4 宏不执行命令替换,但这无关紧要。 m4 当然可以发出 shell 脚本,这就是 Autoconf 使用 m4 的方式。那些绝对可以执行命令替换。您可以在编辑器中检查生成的 configure 脚本,以确认该代码片段未损坏,并且更普遍地解决某些类型的 Autoconf 问题。

标签: autotools m4 docbook-xsl


【解决方案1】:

最后我发现sed 部分是错误的(m4 本身没有什么神奇的)。我发送了一个修复软件的补丁:

https://patchwork.kernel.org/patch/11712861/

-       MANPAGE_DOCBOOK_XSL=$(${XMLCATALOG} ... | sed -n 's|^file:/\+|/|p;q')
+       MANPAGE_DOCBOOK_XSL=$(${XMLCATALOG} ... | sed 's|^file:/\+|/|')

我想我应该将此问题删除为无效。

【讨论】:

    猜你喜欢
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2011-11-16
    • 2010-11-06
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多