【问题标题】:Adding quotes to an appveyor.yml echo line将引号添加到 appveyor.yml 回显行
【发布时间】:2018-10-27 21:13:00
【问题描述】:

我有这行添加一些版本信息到我的构建:

install:
  - 'echo "export const VERSION = Git Hash: %APPVEYOR_REPO_COMMIT%" > version.js'

显然这不是有效的 JS,因为缺少引号。有人可以帮助我,以便我可以将此字符串写入我的 version.js 文件:

export const VERSION = 'Git Hash: some_hash'

我确实尝试了一些转义和非转义引号的变体,但构建时间有些痛苦。

【问题讨论】:

    标签: bash yaml appveyor


    【解决方案1】:

    引用该序列元素是在浪费单引号的使用。你不能有一个简单的标量(因为句子中间的冒号+空格),但使用文字块样式标量通常要好得多。以下等同于您的 YAML:

    install:
      - |-
        echo "export const VERSION = Git Hash: %APPVEYOR_REPO_COMMIT%" > version.js
    

    因此,您可以在 echo 参数中使用单引号,并且在这些参数中仍然使用双引号:

    install:
      - |-
        echo 'export const VERSION = "Git Hash: %APPVEYOR_REPO_COMMIT%"' > version.js
    

    (需要| 之后的- 来去除最后的换行符)

    或者,假设 Appveyor 使用相对标准的回显,您也许可以使用其-e 选项:

        -e     enable interpretation of backslash escapes
    

    在这种情况下,您不需要使用文字块样式标量来获得可读性较差的内容:

    install:
      - 'echo -e "export const VERSION = \"Git Hash: %APPVEYOR_REPO_COMMIT%"" > version.js'
    

    请注意,根据官方 YAML 常见问题解答,只要有可能,YAML 文件的正确扩展名是 .yaml。您可以使用 Custom configuration .yml [sic!] file name 告诉 Appveyor 不要默认使用 .yml 扩展名。对于我的 YAML 解析器,我还将其设置为隐藏文件:.appveyor.yaml

    【讨论】:

    • -e 不是必需的; \" 是双引号字符串中的文字引号,而不是要解释的 \n 之类的特殊转义序列。具有讽刺意味的是,-e不是标准echo的一部分;这是一个 bash 扩展,用于启用标准 echo 已经实现的行为。
    • 看起来很复杂:文字块产生这个错误:解析块集合时,没有找到预期的'-'指示符。e 选项写入@987654340 @ 进入 version.js。
    • @three 抱歉,在再次查看该代码后(这违反了我的正常做法,我没有以编程方式生成)我注意到最后一行缩进不够。 echoe 至少应该在 | 之下
    • echo -e 的便携式替代品称为printf
    • @Anthon 我们走了,成功了。您能否更新答案,以便发现此问题的每个人都能正确回答?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2020-09-24
    • 2020-03-02
    • 2014-01-20
    • 1970-01-01
    相关资源
    最近更新 更多