You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在YAML的until-do循环中正确包裹多行命令?

在YAML的until-do循环中编写多行Shell命令的正确方式

问题背景

我需要在YAML文件的script部分使用until-do循环,并且希望把until子句中的helm upgrade命令拆分成多行来提升可读性。

原本单独的多行helm upgrade命令写法是可行的:

- >
  helm upgrade $(...) /helm/charts/ -f .(...)
    --install
    --set host=(...)
    --set tag=(...)
    --set image=(...)
    --namespace (...)

但当我把它包裹进until-do循环后,写成下面的格式就报错了:

- >
      until helm upgrade $FOO helm/charts/ -f ./(...)
        --install
        --set imagePullSecret=(...)
        --set host=(...) --set tag=(...)
        --set image=(...)
        --namespace (...); do
          helm uninstall $FOO
          done

报错信息如下:

(...): line 161: --install: command not found
(...): line 162: --set: command not found
(...): line 163: --set: command not found
(...): line 164: --set: command not found
(...): line 165: --namespace: command not found
Error: uninstall: Release not loaded: (...): release: not found

而如果把helm upgrade命令写成单行,循环就能正常运行:

- >
   until helm upgrade foo helm/charts/ -f ./(...) --install --set imagePullSecret=(...) --set host=(...) --set tag=(...) --set image=(...) --namespace (...); do
        helm uninstall foo
        done

运行结果正常:

Release "bar" has been upgraded. Happy Helming!

请问在YAML的until-do循环中包裹多行命令的正确方式是什么?


问题原因

报错的核心是:YAML的>折叠块会将换行符转换为空格,但当Shell命令拆分成多行时,如果没有续行符,Bash会把换行后的--install、--set等内容当成独立的新命令执行,自然就会报“命令未找到”的错误。

正确写法

要让多行命令在Shell中被识别为同一个命令的延续,需要在每行末尾添加反斜杠\,同时保持YAML的格式正确(缩进一致,>块的语法正确)。

示例如下:

- >
  until helm upgrade $FOO helm/charts/ -f ./(...) \
    --install \
    --set imagePullSecret=(...) \
    --set host=(...) \
    --set tag=(...) \
    --set image=(...) \
    --namespace (...); do
    helm uninstall $FOO
  done

关键要点

  1. 续行符\:在helm upgrade命令的每一行末尾添加\,告诉Bash这一行的命令还没结束,下一行是命令的延续。注意\后面不能有多余的空格,否则会被当作命令的一部分导致报错。
  2. YAML缩进:保持所有命令行的缩进一致,避免因为YAML格式错误导致Shell解析异常。
  3. until循环语法:确保until后的命令末尾有分号;,do和done的位置符合Shell语法要求。

内容的提问来源于stack exchange,提问作者wwillfred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:41:05