【问题标题】:rpmbuild: Can I set a variable to truncated hostname and force lowercaserpmbuild:我可以将变量设置为截断的主机名并强制小写吗
【发布时间】:2023-03-22 12:45:02
【问题描述】:

所以我可以很容易地在 bash 中做这种事情,使用类似的东西:

HOSTNAME=`hostname -s`
SHORTHOST=${HOSTNAME%??}
HOST=$( echo "$SHORTHOST" | tr -s  '[:upper:]'  '[:lower:]' )

可能有更好的方法来做到这一点,但它确实有效。

真正的问题是是否有办法在规范文件的变量中设置它?

或者我应该简单地在 %post 中玩这些东西?

【问题讨论】:

    标签: bash rpmbuild


    【解决方案1】:

    这个问题被标记为bash

    如果你实际使用的是 bash,那么 HOSTNAME 已经定义好了。要将其转换为小写,只需使用${HOSTNAME,,}

    因此,要获得小写的 SHORTHOST:

    SHORTHOST=${HOSTNAME%??}
    echo "${SHORTHOST,,}"
    

    如果我们不是在 bash 下运行,那么我们必须使用一些实用程序来转换为小写。虽然tr 广泛可用,但sed 具有Unicode 安全的优势:

    HOST="$(echo "${shorthost}" | sed 's/.*/\L&/')"
    

    或者,将它们放在一起用于非 bash shell:

    HOST="$(hostname -s | sed 's/..$//; s/.*/\L&/')"
    

    如果您使用的 bash 版本早于版本 4(这意味着 Mac OSX),请使用非 bash 方法。

    【讨论】:

    • 我认为他正在寻找${SHORTHOST,,}
    • rpmwhatever.spec 内部只是一系列 bash(或 shell)命令(带有一些 rpm 特定的扩展)。 SHORTHOST 只是一个普通变量,最后 2 个字符被切掉。这就是为什么我认为他实际上想要(的内容)SHORTHOST 小写(尽管我们都知道他转换为小写的顺序并不重要:)
    • @DavidC.Rankin 谢谢!我修正了错字并更新以处理 bash 和非 bash 的 SHORTHOST。
    • V4 之前的 Bash 版本不支持 ${var,,}${var^^}
    • @alvits 这是真的。我更新了答案以提及这一点。 Bash 4.0 于 2009 年发布。据我所知,唯一仍在使用 bash 3.x 的操作系统是 OSX。 (如果你知道其他人,请纠正我。)
    【解决方案2】:

    您可以使用 %() 运行 bash 命令,或者您可以使用 --defines 在 bash 中计算的变量的脚本启动 rpmbuild。两者各有优缺点。

    【讨论】:

      猜你喜欢
      • 2014-01-02
      • 2021-06-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多