ฉันจะตรวจสอบไฟล์ YAML ของฉันจากบรรทัดคำสั่งได้อย่างไร


91

ฉันมีปัญหาในการดึงไฟล์กำหนดค่า 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)"
Natim

21
คำถามนี้ไม่ควรปิด อาจเปลี่ยนคำเป็น "ฉันจะตรวจสอบไฟล์ YAML จากบรรทัดคำสั่งได้อย่างไร" นี่เป็นคำถามที่ถูกต้องและมีประโยชน์
Hanxue

5
Seconded @hanxue - สิ่งนี้ปรากฏขึ้นเป็นผลลัพธ์แรกเมื่อค้นหาหัวข้อและควรเป็นข้อมูลอ้างอิงที่มีประโยชน์เมื่อ Google นำเรามาที่นี่
brice

5
ใช่คำถามนี้ไม่ควรปิด ฉันไม่คิดว่าคำตอบจะแสดงความคิดเห็นหรือเป็นสแปม
Joey Novak

คำตอบ:


147

ด้วยการติดตั้ง 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 หากคุณมองอยู่
Jeff Puckett

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
Natim

4
/ usr / bin / perl -MCPAN -e 'install YAML'
Ben Mathews

อาจมีปัญหากับการติดตั้ง CPAN แต่:Can't locate object method "install" via package "YAML" at -e line 1.
Cheruvim

หากข้างต้นไม่ได้ผลคุณสามารถลองได้ตลอดเวลา: perl -MCPAN -e 'shell'จากนั้นที่บรรทัดคำสั่ง doinstall YAML
Cheruvim

9

คุณสามารถใช้yamllint มีให้ใช้งานใน Homebrew เป็นต้นซึ่งสามารถใช้สำหรับการตรวจสอบความถูกต้องของไวยากรณ์และสำหรับการขุย


6

ในการแก้ไข.yamlไฟล์ของคุณฉันขอแนะนำเครื่องมือ yamllint สามารถเปิดใช้งานได้อย่างง่ายดายจากคอนโซลภายในเครื่อง

แพคเกจyamllintนี้มีให้สำหรับระบบปฏิบัติการหลักทั้งหมด

สามารถติดตั้งได้จากแหล่งแพ็กเกจของระบบ (เช่นsudo apt-get install yamllint). ดูเอกสารสำหรับการเริ่มต้นและการติดตั้งอย่างรวดเร็ว


1

หากคุณไม่ได้ติดตั้งล่ามในสภาพแวดล้อมของคุณ แต่ยังมีcurl อยู่คุณสามารถใช้โครงการ linter ออนไลน์เช่นLint-Trilogy :

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

จะให้ผลการตรวจสอบความถูกต้องรวมถึง รายละเอียดข้อผิดพลาด (ถ้ามี) เป็น JSON หรือ CSV หรือที่เพียงพอเป็นข้อความธรรมดาจริงหรือเท็จ

มีให้ในรูปแบบไฟล์นักเทียบท่าด้วยเช่นกัน ดังนั้นหากคุณต้องใช้ Linter ที่ใช้ REST อยู่บ่อยๆบางทีอาจอยู่ในไปป์ไลน์ CI / CD การโฮสต์อินสแตนซ์ของตัวเองบนไซต์ของคุณอาจสะดวก


-9

หรือติดตั้งแบบอื่น (ฟรี) Eclipse IDE แล้วแก้ไข YEdit yaml และดู yaml ของคุณด้วยการเน้นไวยากรณ์แฟล็กข้อผิดพลาดและมุมมองเค้าร่าง ค่าติดตั้งเพียงครั้งเดียวใช้ได้ผลดีสำหรับฉัน


3
OP ขอโซลูชัน CLI โดยเฉพาะ
crantok
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.