【问题标题】:Escape asterisk sign in variable in Gitlab ci yml在Gitlab ci yml中转义星号符号
【发布时间】:2021-11-06 01:30:15
【问题描述】:

我有一个像这样声明的变量

variables:
    SCHEDULE: "35 0 5 * * ?"

这里用到了

- CMD="python helloworld.py"
- if [ ${SCHEDULE+x} ]; then CMD+=" --schedule ${SCHEDULE}"; fi

当使用此 ${SCHEDULE} 变量时,星号 (*) 将转换为该容器中的文件/目录列表,而我只是希望此变量与写入时一样。

如何在 Gitlab CI yml 文件的变量中转义星号 * 符号?

这是整个命令的调用方式:

 - CMD="python helloworld.py"
 - if [ "${SCHEDULE+x}" ]; then CMD+=" --schedule \"${SCHEDULE}\""; fi
 - echo $CMD
 - eval $CMD

提前致谢。

【问题讨论】:

    标签: gitlab yaml gitlab-ci


    【解决方案1】:

    yml 文件不是问题;它是被执行的脚本。您需要引用参数扩展。

     - CMD="python helloworld.py"
     - if [ "${SCHEDULE+x}" ]; then CMD+=" --schedule \"${SCHEDULE}\""; fi
    

    您还需要在 CMD 的值中加上引号,以便在执行 CMD 时执行

    python helloworld.py --schedule "35 0 5 * * ?"
    

    而不是

    python helloword.py --schedule 35 0 5 * * ?
    

    【讨论】:

    • 感谢@chepner,但没有解决。还是一样的问题
    • CMD 实际上是如何使用的?通常,这不是建立命令的安全方式。数组会更好,但我不知道您是否可以假设bash 将用于执行命令。
    • 这就是它返回的内容。 " 在那里,但里面仍然是该目录中所有文件的列表 ``` python helloworld.py --schedule "35 0 5 helloworld.py development.json helloworld.py development.json ?" ```
    • 您确定正在使用eval 吗?你所描述的听起来更像CMD 只是在命令位置上被扩展,比如$CMD 而不是eval $CMDeval "$CMD"
    • 让我将命令列表放入问题中,这样看起来更易读。
    【解决方案2】:

    问题在于调用eval 函数。

    更新到这个,一切正常。

    eval "${CMD}"
    

    【讨论】:

      猜你喜欢
      • 2016-05-04
      • 2018-12-15
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多