Как мне проверить свой YAML-файл из командной строки?

88

У меня возникают проблемы с извлечением из файла конфигурации YAML:

Неустранимая ошибка: при разборе отображения блока; ожидается <конец блока>, но найдена запись в блоке

Несмотря на то, что существует множество онлайн-валидаторов YAML, которые я пробовал и помог, я бы хотел проверить свои файлы YAML из командной строки и интегрировать их в свой конвейер непрерывной интеграции.

Как я могу проверить синтаксис файла YAML в командной строке?

слайдшоуp2
источник
5
Попробуйте:travis lint .travis.yml
kenorb
4
python -c "from yaml import load, Loader; load(open('.travis.yml'), Loader=Loader)"
Натим,
20
Этот вопрос не следует закрывать. Возможно, перефразируйте его на «Как мне проверить мой YAML-файл из командной строки». Это правильный и полезный вопрос
Hanxue
4
Seconded @hanxue - это первый результат при поиске по теме, и он должен быть полезным справочником, когда Google отправит нас сюда.
brice
4
Да, этот вопрос закрывать не стоит. Я не думаю, что ответы являются самоуверенными или спамовыми.
Джои Новак

Ответы:

144

При базовой установке Ruby это должно работать:

ruby -ryaml -e "p YAML.load(STDIN.read)" < data.yaml

Версия Python (спасибо @Murphy):

pip install pyyaml
python -c 'import yaml, sys; print(yaml.safe_load(sys.stdin))' < data.yaml
Томбарт
источник
2
Если вы удалите puts yс конца этого, вы получите более стандартное поведение UNIX: если файл действительный, то ничего не будет напечатано, а если он недействителен, вы увидите исключение и трассировку стека.
bdesham
… И если вы удалите, puts yвы также можете избавиться от y=.
bdesham
Спасибо, это точно лучше и короче.
Tombart
1
И если вы действительно используете это как часть конвейера тестирования CI, то в этом нет необходимости puts. Код возврата просто, 0если он действителен, иначе ненулевой, и вы получите трассировку стека исключений. Уменьшает шум на выходе CLI, если вы даже смотрите на него.
Джефф Пакетт
1
Если вы используете следующее: ruby -e "require 'yaml';puts YAML.load_file(ARGV[0])"вы можете передать имя файла после, вместо того, чтобы редактировать фрагмент напрямую.
pnomolos
22

Учитывая, что у вас установлен Perl на сервере, над которым вы работаете, и у него есть некоторые из основных инструментов YAML, вы можете использовать ...

perl -MYAML -e 'use YAML;YAML::LoadFile("./file.yaml")'

Следует отметить, что это будет строгое толкование файла, но полезно.

К. С. Маршалл
источник
3
Не могу найти YAML.pm
Натим
4
/ usr / bin / perl -MCPAN -e 'install YAML'
Бен Мэтьюз,
возможно проблема с установкой CPAN, но:Can't locate object method "install" via package "YAML" at -e line 1.
Cheruvim
Если вышеперечисленное не работает, вы всегда можете попробовать: perl -MCPAN -e 'shell'а затем в командной строке сделайтеinstall YAML
Cheruvim
8

Вы можете использовать yamllint . Он доступен в Homebrew и т.д. Его можно использовать для проверки синтаксиса, а также для линтинга.

Джеймс Хью
источник
5

Чтобы исправить ваши .yamlфайлы, я рекомендую инструмент yamllint. Его можно легко запустить с локальной консоли.

Пакет yamllintдоступен для всех основных операционных систем.

Его можно установить из исходников пакетов системы. (например sudo apt-get install yamllint). См. Документацию для быстрого запуска и установки.

кинафу
источник
-9

Или поочередно установите (бесплатно) Eclipse IDE, а затем YEdit yaml editor и посмотрите свой yaml с подсветкой синтаксиса, флагами ошибок и представлениями схемы. Единовременная стоимость установки мне подходит.

Эрни
источник
2
OP специально запросил решения CLI.
crantok