Как использовать многострочную команду в 'script:' с помощью YAML?

У меня есть репозиторий, который использует Travis CI, а в .travis.yml у меня есть эта строка:

script:
- vim -Nu <(cat <<-EOF
  set nocompatible |
  filetype off
  EOF
  ) -c 'Script' > /dev/null

К сожалению, это не работает, поскольку оно преобразуется в одну строку и выполняется следующим образом:

vim -Nu <(cat <<-EOF set no compatible | filetype off | EOF ) -c 'Script' > /dev/null

Это означает, что тег EOF не работает, так как EOF должен находиться в одной строке. Альтернативой было бы просто использовать обычные кавычки, подобные этому:

script:
- vim -Nu <(cat 'set nocompatible |
  filetype off
  ) -c 'Script' > /dev/null

Что работает, и это нормально, но я считаю, что должен быть способ вставить новые строки в .travis.yml. Теперь у меня есть альтернатива, но я не могу в будущем. Итак, как вы это делаете?

Ответ 1

В YAML вы можете указать новые строки в скаляре, используя "" цитирование и экранирование строк новой строки (\n), или, что более естественно для вашего случая, используя буквальный скаляр стиля сканера:

script:
- |
  vim -Nu <(cat <<-EOF
  set nocompatible |
  filetype off
  EOF
  ) -c 'Script' > /dev/null

Это скаляр, начинающийся с строки с символом | (символ трубы), за которым следуют несколько строк, для которых сохраняются разрывы строк.

  • Строки обычно имеют отступы (исключение: один лидирующий блок стиля верхнего уровня).
  • После | могут быть модификаторы: 1 - 9, используемые, когда ваша первая строка начинается с пробелов; +, -, чтобы повлиять на разделение окончательной новой строки (обычно сворачивается в одну).

Ответ 2

Я использую такой формат для достижения именно желаемого эффекта

script:
    - >
      valgrind
      --read-var-info=yes
      --error-exitcode=1
      --fullpath-after=
      --track-origins=yes
      --leak-check=full
      --num-callers=20
      --suppressions=$(pwd)/tests/zephir_parser.3.7.0.sup
      $(phpenv which php)
          -d variables_order=EGPCS
          run-tests.php
              -p $(which php)
              -d extension=$(pwd)/modules/zephir_parser.so
              -d variables_order=EGPCS
              -g "FAIL,XFAIL,BORK,WARN,LEAK,SKIP"
              --offline
              --show-diff
              --set-timeout 120