Đây là trường hợp sử dụng của tôi: tiện ích dòng lệnh melt
có thể chấp nhận tên tệp, với phần mở rộng .melt
trên dòng lệnh và mở nó; như một ví dụ, đây là một test_p.melt
tậ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à .melt
cá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.melt
tậ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 melt
trự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 sed
và 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 melt
mà 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 .melt
phầ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.melt
mà 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?
melt
khô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 melt
thay 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.file
có 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 melt
trê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)