Как использовать многострочную команду в '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