【问题标题】:For loop gitlab-ci.ymlFor 循环 gitlab-ci.yml
【发布时间】:2020-02-14 10:44:13
【问题描述】:

我有这个代码 sn-p。它给了我语法错误:文件意外结束 如果我将它复制到 .sh 文件中并在终端中运行,它就可以工作。

before_script:
    - sbt sbtVersion
    - for file in ./pending/*.sql; do
        file=$(basename "$file")
        export str_opt="$(cat ./pending/"$file"|tr '\n' ' ')"
        mv ./pending/"$file" ./done/
        done

我哪里错了?

【问题讨论】:

    标签: bash shell gitlab-ci


    【解决方案1】:
    do;
    

    do 后面没有;。删除它。

    gitlab-ci 中 yaml 的工作方式,它将行连接成一个长行,用换行符和行前导空格替换单个空格:

    for file in ./pending/*.sql; do; file=$(basename "$file"); export str_opt="$(cat ./pending/"$file"|tr '\n' ' ')"; mv ./pending/"$file" ./done/; done
    

    因为do后面的;无效。

    这样的脚本:

    before_script:
        - sbt sbtVersion
        - for file in ./pending/*.sql; do
                 file=$(basename "$file");
                 export str_opt="$(cat ./pending/"$file"|tr '\n' ' ')";
                 mv ./pending/"$file" ./done/;
            done
    

    应该可以。

    【讨论】:

    • 我现在粘贴了错误的版本检查。没有 tis 不能解决它。
    • 所以它只是在 do 和 done 之后不需要,因为它的循环语法?
    • 好吧,如果我理解正确的话,“因为它的语法”很可能是正确的。 bash 的语法是do 和后面的命令列表后面什么都没有。 do 和命令列表之后的换行符、空格和制表符将被忽略。 done 后面不需要,done 后面也可以换行。
    • 好的,确切地说:yaml 中纯标量值中的换行符将被空格替换。让我们参考一下:yaml.org/spec/1.2/spec.html#style/flow/plainExample 7.12. Plain LinesOch,你也可以做空行,不知道。
    • 嗯。我检查了一些 YAML 到 JSON 的转换器。其中三个保留换行符(123),一个折叠空格(1),一个表示无效的 YAML(1)。
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 2021-03-21
    • 2022-01-08
    • 2021-01-28
    • 2018-03-10
    • 2019-08-28
    相关资源
    最近更新 更多