YAML dosyamı komut satırından nasıl doğrularım?


91

Bir YAML yapılandırma dosyasından veri çekerken sorun yaşıyorum:

Ölümcül hata: bir blok eşlemesini ayrıştırırken; <blok sonu> bekleniyordu, ancak blok girişi bulundu

Denediğim ve yardım ettiğim birçok çevrimiçi YAML doğrulayıcısı varken, YAML dosyalarımı komut satırından doğrulamak ve bunu sürekli entegrasyon hattıma entegre etmek istiyorum.

Komut satırında bir YAML dosyasının sözdizimini nasıl doğrulayabilirim?


5
Deneyin:travis lint .travis.yml
kenorb

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

21
Bu soru kapatılmamalıdır. Belki de "YAML dosyamı komut satırından nasıl doğrularım?" Bu geçerli ve faydalı bir soru
Hanxue

5
Seconded @hanxue - Bu, konu aranırken ilk sonuç olarak ortaya çıkar ve google bizi buraya getirdiğinde faydalı bir referans olmalıdır.
brice

5
Evet, bu soru kapatılmamalı. Cevapların kanaatkar veya spam olduğunu sanmıyorum.
Joey Novak

Yanıtlar:


147

Temel Ruby kurulumunda bu çalışmalıdır:

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

Python sürümü (thx @Murphy):

pip install pyyaml
python -c 'import yaml, sys; print(yaml.safe_load(sys.stdin))' < data.yaml

2
Bunu puts ysonundan kaldırırsanız, daha standart bir UNIX davranışı elde edersiniz: dosya geçerliyse hiçbir şey yazdırılmaz ve geçersizse, bir istisna ve yığın izleme görürsünüz.
bdesham

… Ve eğer kaldırırsanız, puts ysiz de kurtulabilirsiniz y=.
bdesham

Teşekkürler, bu kesinlikle daha iyi ve daha kısa.
Tombart

1
Ve bunu gerçekten bir ci test hattının bir parçası olarak kullanıyorsanız, o zaman buna hiç gerek yoktur puts. Dönüş kodu basitçe 0geçerliyse, aksi takdirde sıfır değildir ve bir istisna yığın izlemesi alırsınız. Baksanız bile CLI çıkışındaki gürültüyü azaltır.
Jeff Puckett

1
Aşağıdakileri kullanırsanız: ruby -e "require 'yaml';puts YAML.load_file(ARGV[0])"parçacığı doğrudan düzenlemeniz gerekmek yerine dosya adını sonrasına iletebilirsiniz.
pnomolos

22

Üzerinde çalıştığınız sunucuda bir perl kurulumunuz olduğu ve bazı temel YAML araçlarına sahip olduğu göz önüne alındığında, kullanabilirsiniz ...

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

Bunun dosyanın yorumlanmasında katı, ancak faydalı olacağı unutulmamalıdır.


3
YAML.pm bulunamıyor
Natim

4
/ usr / bin / perl -MCPAN -e 'YAML'yi yükle'
Ben Mathews

Muhtemelen CPAN kurulumuyla ilgili bir sorun var ama:Can't locate object method "install" via package "YAML" at -e line 1.
Cheruvim

Yukarıdakiler işe yaramazsa, her zaman deneyebilirsiniz: perl -MCPAN -e 'shell've sonra komut satırında yapıninstall YAML
Cheruvim

9

Yamllint kullanabilirsin . Homebrew, vb. Olarak mevcuttur. Sözdizimi doğrulamasının yanı sıra linting için de kullanılabilir.



1

Ortamınızda yüklü bir tercüman yoksa, ancak yine de bir curl varsa , Lint-Trilogy gibi bir çevrimiçi linter projesi kullanabilirsiniz :

curl -X POST  --data "data=$(cat myfile.yml)" https://www.lint-trilogy.com/lint/yaml/json

Doğrulama sonucunu sunar. json veya csv gibi hata açıklamaları (varsa) ya da yeterli olduğunda doğru veya yanlış düz metin olarak .

Docker dosyası olarak da mevcuttur. Bu nedenle, genellikle bir CI / CD ardışık düzeninde REST tabanlı bir linter'e ihtiyacınız varsa, sitenizde kendi örneğini barındırmak kullanışlı olabilir.


-9

Veya alternatif olarak yüklenen (ücretsiz) Eclipse IDE ve ardından YEdit yaml editörü ve söz dizimi vurgulama, hata bayrakları ve anahat görünümleriyle yaml'nızı görün. Tek seferlik kurulum maliyeti benim için oldukça iyi çalışıyor.


3
OP, özellikle CLI çözümleri istedi.
crantok
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.