Yaml 如何在多行上打断'script'步骤中的单个命令

Yaml 如何在多行上打断'script'步骤中的单个命令,yaml,azure-pipelines,Yaml,Azure Pipelines,我们有一个使用Azure Pipeline的项目,它依赖于repo根目录下的Azure-pipelines.yml文件 在执行脚本步骤时,可以在同一步骤中执行连续命令,只需在不同的行上写入命令: - script: | ls -la pwd echo $VALUE 但是,如果我们有一个非常长的命令,我们希望能够在YAML文件中将其拆分为几行,但找不到相应的语法?您可以使用“^”将命令行拆分为多行。查看下面的exmaple。下面的脚本将输出“helloworld”,就像一个单行命令e

我们有一个使用Azure Pipeline的项目,它依赖于repo根目录下的Azure-pipelines.yml文件

在执行脚本步骤时,可以在同一步骤中执行连续命令,只需在不同的行上写入命令:

- script: |
  ls -la
  pwd
  echo $VALUE

但是,如果我们有一个非常长的命令,我们希望能够在YAML文件中将其拆分为几行,但找不到相应的语法?

您可以使用“^”将命令行拆分为多行。查看下面的exmaple。下面的脚本将输出“helloworld”,就像一个单行命令echo“helloworld”

- script: |
    echo ^
    'hello ^
    world'

可以使用“^”将命令行拆分为多行。查看下面的exmaple。下面的脚本将输出“helloworld”,就像一个单行命令echo“helloworld”

- script: |
    echo ^
    'hello ^
    world'

目前,我们找到的在多行上打断单个命令的唯一方法是使用YAML折叠样式:

这一切都是关于用>取代|

注:

不可能在以下行中引入额外的缩进!例如,尝试对齐给定给命令的所有参数将破坏该行为。 此样式将用简单的空白替换提供值中的换行符。这意味着脚本现在只能包含一个命令\n可能在行尾添加literal实际上会在字符串中引入换行符,但与通常的自动换行符方法相比,它感觉落后,除非添加了显式的延续符。
目前,我们找到的在多行上打断单个命令的唯一方法是使用YAML折叠样式:

这一切都是关于用>取代|

注:

不可能在以下行中引入额外的缩进!例如,尝试对齐给定给命令的所有参数将破坏该行为。 此样式将用简单的空白替换提供值中的换行符。这意味着脚本现在只能包含一个命令\n可能在行尾添加literal实际上会在字符串中引入换行符,但与通常的自动换行符方法相比,它感觉落后,除非添加了显式的延续符。
你没有指定你的代理操作系统,所以我测试了windows最新版本和ubuntu最新版本。请注意,脚本任务在这两种环境中的运行方式略有不同。在Windows上,它使用cmd.exe。在Ubuntu上,它使用bash。因此,您必须使用正确的语法

在Windows上:

pool:
  vmImage: 'windows-latest'

steps:
- script: |
    mkdir ^
    test ^
    -p ^
    -v
在Ubuntu上:

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: |
    mkdir \
    test \
    -p \
    -v

上面这两个文件在我的Azure DevOps上工作。

您没有指定代理操作系统,所以我在windows最新版本和ubuntu最新版本上进行了测试。请注意,脚本任务在这两种环境中的运行方式略有不同。在Windows上,它使用cmd.exe。在Ubuntu上,它使用bash。因此,您必须使用正确的语法

在Windows上:

pool:
  vmImage: 'windows-latest'

steps:
- script: |
    mkdir ^
    test ^
    -p ^
    -v
在Ubuntu上:

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: |
    mkdir \
    test \
    -p \
    -v

上面这两个文件在我的Azure DevOps上运行。

Hi@Ad N您是否尝试了下面的答案,它对您有效吗?如果有任何问题,请告诉我。您好@Ad N您是否尝试过下面的答案,它对您有用吗?如果有任何问题,请告诉我。我刚才能够测试,据我所知,脚本仍然将每一行视为一个单独的命令,从而打破了预期的行为。我刚才能够测试,据我所知,脚本仍然将每一行视为一个单独的命令,因此违反了预期行为。感谢您的回复。然后我们假设这个语法实际上被转发到进行解释的底层shell。遗憾的是,由于我们严重依赖于跨越Windows和Linux/macOS的矩阵构建,我们不能依赖于不同的语法,这取决于底层代理操作系统。感谢您的回复。然后我们假设这个语法实际上被转发到进行解释的底层shell。不幸的是,由于我们严重依赖于跨越Windows和Linux/macOS的矩阵构建,我们不能依赖于不同的语法,这取决于底层代理操作系统。Hi@Ad N,因为您使用yaml Fold style>解决了这个问题。您可以接受它作为一个答案。您好@Ad N,因为您使用yaml折叠样式>。你可以接受它作为一个答案。