Đây là trường hợp sử dụng của tôi: tiện ích dòng lệnh meltcó thể chấp nhận tên tệp, với phần mở rộng .melttrên dòng lệnh và mở nó; như một ví dụ, đây là một test_p.melttập tin thích hợp :
colour:blue
out=24
colour:red
out=48
... mở ra và chơi với melt test_p.melt.
Bây giờ, điều là .meltcác tệp không hỗ trợ các bình luận, điều mà tôi muốn họ đã làm (bạn sẽ nhận được thông báo lỗi cho bất kỳ dòng nào có chứa một đối số không thể sửa chữa, bao gồm cả những người có, giả sử, a #). Vì vậy, đây là một test_c.melttập tin nhận xét :
# master comment here
colour:blue # this is blue!
out=24
colour:red
out=48
Mở cái này melttrực tiếp cho:
$ melt test_c.melt
Failed to load "# master comment here"
...
... và không có màn hình màu xanh hiển thị.
Vì vậy, tôi nghĩ - tốt, dù sao tôi cũng có thể đưa ra nhận xét , sau đó sử dụng thay thế quy trình Bash để lọc tệp sedvà chỉ cần cung cấp cho meltứng dụng. Đầu tiên, thử một thử nghiệm cat, thành công:
$ cat <(sed 's/#.*$//' test_c.melt)
colour:blue
out=24
colour:red
out=48
... Có vẻ tốt; nhưng , nếu tôi thử điều đó với melt, nó sẽ thấy qua mánh khóe của tôi:
$ melt <(sed 's/#.*$//' test_c.melt)
Failed to load "/dev/fd/62"
Failed to load "/dev/fd/62"
Về cơ bản, tan có tên tệp của ống Bash được cung cấp để thay thế quy trình - nhưng thật không may, cái meltmà nó xử lý argv[i]trực tiếp; và trong trường hợp của một tập tin, nó cần phải xem một .meltphần mở rộng trong tên tệp; nếu không - quá trình thất bại.
Vì vậy, câu hỏi của tôi là: làm thế nào tôi có thể sử dụng thay thế quá trình - vì vậy tên tệp của đường ống có phần mở rộng cụ thể, trong trường hợp này .melt? Về cơ bản, là kết quả của sự thay thế, tôi muốn có một tên tệp ống /dev/fd/62.meltmà tôi nghĩ sẽ vượt qua.
NB: tất nhiên, tôi luôn có thể làm:
sed 's/#.*$//' test_c.melt > test_c_temp.melt
melt test_c_temp.melt
... nhưng trước tiên, có hai lệnh ở đây - và tôi muốn một đường ống một lớp; và đối với một vấn đề khác, nó mở ra một vấn đề khác của tôi khi nghĩ về việc xóa các tệp tạm thời sau đó, điều mà tôi không thích.
Điều này có thể với sự thay thế quá trình Bash - hoặc bằng cách nào đó với các công cụ Linux tiêu chuẩn?
meltkhông quan tâm đến các lệnh được truyền qua stdin, vì tôi nhận được: Usage: melt [options] [producer [name=value]* ]+và một loạt các tùy chọn chương trình. Chúc mừng!
man meltthay mặt bạn. " Nếu không có tệp nào được chỉ định, việc nén được áp dụng cho đầu vào tiêu chuẩn ". Vì vậy, sed 's/#.*$//' test_c.melt | melt > result.filecó thể làm việc.
melt(MLT tan 0.6.2; "đầu vào tiêu chuẩn" không được đề cập trong phiên bản này man melt), vì lệnh đó, một lần nữa tôi nhận được Usage: melt [options] [producer [name=value]* ]+và một bãi chứa. Chúc mừng!
man melttrên máy của bạn. Nếu bạn không thể tìm thấy bài trả lời trên pastebin.com và đăng liên kết ở đây.
melt < <(sed 's/#.*$//' test_c.melt)