How to break a single command inside a `script` step on multiple lines

后端 未结 3 1461
旧巷少年郎
旧巷少年郎 2021-01-28 22:23

We have a project using Azure Pipeline, relying on azure-pipelines.yml file at the repo\'s root.

When implementing a script step, it is possibl

相关标签:
3条回答
  • 2021-01-28 22:49

    At the moment, the only way we found for to break a single command on multiple line is using YAML folded style:

    - script: >
        echo
        'hello world'
    

    It is all about replacing | with >.

    Notes:

    • It is not possible to introduce extra indentation on the following lines! For example, trying to align all arguments given to a command would break the behaviour.
    • This style will replace newlines in the provided value with a simple white space. This means the script now can only contain a single command (maybe adding literal \n at the end of the line would actually introduce a linebreak in the string, but it feels backward compared to the usual approach of automatice linebreak unless an explicit continuation is added).
    0 讨论(0)
  • 2021-01-28 22:54

    You didn't specify your agent OS so I tested on both windows-latest and ubuntu-latest. Note that the script task runs a bit differently on these 2 environments. On Windows, it uses cmd.exe. On Ubuntu, it uses bash. Therefore, you have to use the correct syntax.

    On Windows:

    pool:
      vmImage: 'windows-latest'
    
    steps:
    - script: |
        mkdir ^
        test ^
        -p ^
        -v
    

    On Ubuntu:

    pool:
      vmImage: 'ubuntu-latest'
    
    steps:
    - script: |
        mkdir \
        test \
        -p \
        -v
    

    Those two files above work on my Azure DevOps.

    0 讨论(0)
  • 2021-01-28 22:54

    You can use '^' to break your command line into multiple lines. Check below exmaple. Below script will output 'hello world' like a single line command echo 'hello world'

    - script: |
        echo ^
        'hello ^
        world'
    
    0 讨论(0)
提交回复
热议问题