Làm cách nào để xác thực tệp YAML của tôi từ dòng lệnh?


88

Tôi đang gặp sự cố khi lấy từ tệp cấu hình YAML:

Lỗi nghiêm trọng: trong khi phân tích cú pháp khối ánh xạ; mong đợi <khối kết thúc>, nhưng tìm thấy mục nhập khối

Mặc dù có rất nhiều trình xác thực YAML trực tuyến mà tôi đã thử và đã giúp đỡ, tôi muốn xác thực các tệp YAML của mình từ dòng lệnh và tích hợp nó vào đường dẫn tích hợp liên tục của tôi.

Làm cách nào để xác thực cú pháp của tệp YAML trên dòng lệnh?


5
Hãy thử:travis lint .travis.yml
kenorb

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

20
Câu hỏi này không nên được đóng lại. Có lẽ nên chuyển từ nó thành "Làm cách nào để xác thực tệp YAML của tôi từ dòng lệnh". Đây là một câu hỏi hợp lệ và hữu ích
Hanxue

4
Seconded @hanxue - Đây là kết quả đầu tiên khi tìm kiếm chủ đề và sẽ là tài liệu tham khảo hữu ích khi google đưa chúng tôi đến đây.
brice

4
Vâng, câu hỏi này không nên được đóng lại. Tôi không nghĩ rằng các câu trả lời là cố ý hoặc spam.
Joey Novak,

Câu trả lời:


144

Với cài đặt Ruby cơ bản, điều này sẽ hoạt động:

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

Phiên bản Python (thx @Murphy):

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

2
Nếu bạn xóa phần puts ycuối này thì bạn sẽ nhận được hành vi UNIX chuẩn hơn: nếu tệp hợp lệ thì sẽ không có gì được in và nếu nó không hợp lệ thì bạn sẽ thấy một ngoại lệ và dấu vết ngăn xếp.
bdesham

… Và nếu bạn loại bỏ puts ybạn cũng có thể loại bỏ y=.
bdesham

Cảm ơn, điều đó chắc chắn tốt hơn và ngắn hơn.
Tombart

1
Và nếu bạn thực sự chỉ sử dụng nó như một phần của đường dẫn thử nghiệm ci, thì không cần phải làm putsgì cả. Mã trả về chỉ đơn giản là 0nếu hợp lệ, nếu không thì khác không và bạn sẽ nhận được dấu vết ngăn xếp ngoại lệ. Giảm nhiễu trên đầu ra CLI nếu bạn thậm chí đang nhìn vào nó.
Jeff Puckett

1
Nếu bạn sử dụng như sau: thì ruby -e "require 'yaml';puts YAML.load_file(ARGV[0])"bạn có thể chuyển tên tệp vào sau, thay vì cần phải chỉnh sửa đoạn mã trực tiếp.
pnomolos

22

Giả sử rằng bạn có cài đặt perl trên máy chủ bạn đang làm việc và nó có một số công cụ YAML cơ bản, bạn có thể sử dụng ...

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

Cần lưu ý rằng điều này sẽ nghiêm ngặt trong việc giải thích tệp, nhưng hữu ích.


3
Không thể định vị YAML.pm
Natim

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

có thể là vấn đề với cài đặt CPAN nhưng:Can't locate object method "install" via package "YAML" at -e line 1.
Cheruvim

Nếu cách trên không hoạt động, bạn luôn có thể thử: perl -MCPAN -e 'shell'và sau đó tại dòng lệnh thực hiệninstall YAML
Cheruvim

9

Bạn có thể sử dụng yamllint . Nó có sẵn trong Homebrew, v.v. Nó có thể được sử dụng để xác thực cú pháp cũng như để in linting.


5

Để sửa các .yamltệp của bạn, tôi khuyên bạn nên sử dụng công cụ yamllint. Nó có thể được khởi chạy dễ dàng từ bảng điều khiển cục bộ.

Gói yamllintnày có sẵn cho tất cả các hệ điều hành chính.

Nó có thể được cài đặt từ các nguồn gói của hệ thống. (vd sudo apt-get install yamllint). Xem tài liệu để bắt đầu và cài đặt nhanh chóng.


-9

Hoặc được cài đặt luân phiên (miễn phí) Eclipse IDE và sau đó là trình chỉnh sửa YEdit yaml và xem yaml của bạn với tô sáng cú pháp, cờ lỗi và dạng xem phác thảo. Chi phí thiết lập một lần hoạt động khá tốt đối với tôi.


3
OP đã yêu cầu cụ thể các giải pháp CLI.
crantok
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.