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


88

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

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

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

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.