Як перевірити файл 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 із командного рядка". Це
слушне

4
Seconded @hanxue - Це з’являється як перший результат при пошуку теми і повинен бути корисним посиланням, коли Google приземляє нас сюди.
brice

4
Так, це питання не слід закривати. Я не думаю, що відповіді є сумнівними або спамовими.
Joey Novak

Відповіді:


144

При базовій установці Ruby це має працювати:

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

Версія Python (thx @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])"тоді ви можете передати ім'я файлу після, замість того щоб редагувати фрагмент безпосередньо.
пномолос

22

З огляду на те, що у вас встановлена ​​Perl на сервері, над яким ви працюєте, і в ній є деякі основні інструменти YAML, ви можете використовувати ...

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

Слід зазначити, що це буде суворо в інтерпретації файлу, але корисно.


3
Не вдається знайти YAML.pm
Natim,

4
/ usr / bin / perl -MCPAN -e 'встановити YAML'
Бен Метьюз

ймовірно, проблема з установкою CPAN, але:Can't locate object method "install" via package "YAML" at -e line 1.
Керувим

Якщо вищевказане не працює, ви завжди можете спробувати: perl -MCPAN -e 'shell'а потім у командному рядку виконайтеinstall YAML
Cheruvim

9

Ви можете використовувати ямлінт . Він доступний у Homebrew тощо. Він може використовуватися для перевірки синтаксису, а також для встановлення посилань.


5

Для виправлення ваших .yamlфайлів я рекомендую інструмент yamllint. Його можна легко запустити з локальної консолі.

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

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


-9

Або по черзі встановлюйте (безкоштовно) Eclipse IDE, а потім редагуйте YEdit yaml і побачите ваш yaml із підсвічуванням синтаксису, прапорами помилок та поданнями контурів. Одноразова вартість налаштування працює для мене досить добре.


3
OP спеціально попросив рішення CLI.
crantok
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.