Сначала давайте распутаем файл YAML в более удобочитаемом формате:
tasks:
test: {
include: [bash_exec],
args:['-c', 'state --m=4 in=in4.db | cppextract -f , -P NEW_MODEL /stdin Id Date {a,b,b2}{c,d}L {d1,d2,d3,d4}{x,}y | perl -lane '$F[0] = (shift @F) .".$F[0]"; $, = ":"; print @F;' | state2 --id=Id.Date wq.db -'],
answer: '{{out}}/utestt.csv', n: 5, cols: [f,k]
}
Первая проблема - args:[
;YAML требует, чтобы вы отделили значение сопоставления от ключа (если ключ не является скаляром в кавычках). Давайте сделаем это:
tasks:
test: {
include: [bash_exec],
args: [
'-c',
'state --m=4 in=in4.db | cppextract -f , -P NEW_MODEL /stdin Id Date {a,b,b2}{c,d}L {d1,d2,d3,d4}{x,}y | perl -lane '
$F[0] = (shift @F) .".$F[0]"; $, = ":"; print @F;' | state2 --id=Id.Date wq.db -'
],
answer: '{{out}}/utestt.csv', n: 5, cols: [f,k]
}
Это делает очевидным, что происходит: вы заканчиваете скаляр в одинарных кавычках, начинающийся с 'state
прямо перед символом $
. Поскольку мы находимся в последовательности потока YAML (начинается с [
), синтаксический анализатор ожидает запятую или конец последовательности после этого значения. Тем не менее, он находит $
, на что жалуется.
Теперь, очевидно, вы не хотите останавливать скаляр до $
;'
должен быть частью содержимого. Есть несколько способов достижения этого, но наиболее читаемый способ, вероятно, состоит в том, чтобы определить значение как скаляр блока:
tasks:
test:
include: [bash_exec]
args:
- '-c'
- >-
state --m=4 in=in4.db | cppextract -f ,
-P NEW_MODEL /stdin Id Date {a,b,b2}{c,d}L {d1,d2,d3,d4}{x,}y |
perl -lane '$F[0] = (shift @F) .".$F[0]"; $, = ":"; print @F;' |
state2 --id=Id.Date wq.db -
answer:
- '{{out}}/utestt.csv',
- n: 5
- cols: [f, k]
>-
запускает скаляр потока, который может занимать несколько строк, и разрывы строкбудет свернут в космический характер. Обратите внимание, что я удалил отображение окружающего потока ({…}
) и заменил его на отображение блоков, чтобы иметь возможность использовать в нем скаляр блока.
Я также изменил answer
на последовательность, которой он являетсяв настоящее время нет, но похоже, что так и должно быть (это также ошибочно в YAML, который вы показываете).