やったこと
YAML の文法が正しいかどうかを確認する方法を調べました。
確認環境
$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]
調査
正常な YAML
sample.yml
aaa:
bbb: 111
ccc: 222
$ ruby -r yaml -e 'YAML.load_file "sample.yml"'
特に何も表示されません。
壊れている YAML
sample2.yml
aaa:
bbb: ccc:::
ccc: 222
$ ruby -r yaml -e 'YAML.load_file "sample2.yml"'
Traceback (most recent call last):
7: from -e:1:in `<main>'
6: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:577:in `load_file'
5: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:577:in `open'
4: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:578:in `block in load_file'
3: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:277:in `load'
2: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:390:in `parse'
1: from /Users/xxxxx/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:456:in `parse_stream'
/Users/himejima/.rbenv/versions/2.6.3/lib/ruby/2.6.0/psych.rb:456:in `parse': (sample2.yml): mapping values are not allowed in this context at line 2 column 13 (Psych::SyntaxError)
SyntaxError が発生しました。
コマンドの意味
-r
はライブラリを require します。
-e
はコマンドラインで実行する時に使います。
抜粋
$ man ruby
...
-r library Causes Ruby to load the library using require. It is useful when using -n or -p.
-e command Specifies script from command-line while telling Ruby not to search the rest of the arguments for a script file name.