如何从命令行验证YAML文件?


88

我从YAML配置文件提取问题:

致命错误:在解析块映射时;预期<block end>,但找到了块入口

尽管我已经尝试并提供了许多在线YAML验证器,但我还是想从命令行验证我的YAML文件并将其集成到我的持续集成管道中。

如何在命令行上验证YAML文件的语法?


5
试试:travis lint .travis.yml
kenorb

4
python -c "from yaml import load, Loader; load(open('.travis.yml'), Loader=Loader)"
纳蒂姆'16

20
这个问题不应该被解决。也许将其改为“如何从命令行验证我的YAML文件”。这是一个有效和有用的问题
Hanxue's

4
借用@hanxue-这是搜索主题时的第一个结果,当Google在这里找到我们时应作为有用的参考。
布莱斯

4
是的,这个问题不应该解决。我认为答案不是自以为是或垃圾邮件。
Joey Novak '18

Answers:


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 2015年

1
而且,如果您真的只是将其用作ci测试管道的一部分,则根本不需要puts0如果有效,则返回码简单,否则为非零,并且您将获得异常堆栈跟踪。甚至在查看时,也可以减少CLI输出上的噪音。
杰夫·普基特

1
如果您使用以下命令:则ruby -e "require 'yaml';puts YAML.load_file(ARGV[0])"可以在after之后传递文件名,而无需直接编辑代码段。
pnomolos '18

22

假设您正在使用的服务器上已安装了perl,并且具有一些基本的YAML工具,则可以使用...

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

应该注意的是,这在文件解释上将是严格的,但很有用。


3
找不到YAML.pm
纳提姆

4
在/ usr / bin中/ perl的-MCPAN -e '安装YAML'
本·马修斯

可能与CPAN安装有关,但是:Can't locate object method "install" via package "YAML" at -e line 1.
Cheruvim

如果上述方法不起作用,您可以随时尝试:perl -MCPAN -e 'shell'然后在命令行执行install YAML
Cheruvim


5

要更正.yaml文件,我建议使用工具yamllint。可以从本地控制台轻松启动。

该软件包yamllint可用于所有主要操作系统。

它可以从系统的软件包源安装。(例如sudo apt-get install yamllint)。 请参阅文档以快速启动和安装。


-9

或替代安装(免费)的Eclipse IDE,然后安装YEdit yaml编辑器,并通过语法突出显示,错误标志和大纲视图查看yaml。一次安装费用对我来说效果很好。


2
OP特别要求提供CLI解决方案。
crantok '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.