Nhiều người sử dụng oneliners và script chứa mã dọc theo dòng
cat "$MYFILE" | command1 | command2 > "$OUTPUT"
Đầu tiên cat
thường được gọi là "sử dụng mèo vô dụng" vì về mặt kỹ thuật, nó đòi hỏi phải bắt đầu một quy trình mới (thường /usr/bin/cat
) trong đó điều này có thể tránh được nếu lệnh đã được
< "$MYFILE" command1 | command2 > "$OUTPUT"
bởi vì sau đó shell chỉ cần bắt đầu command1
và chỉ cần trỏ nó stdin
vào tệp đã cho.
Tại sao shell không tự động chuyển đổi này? Tôi cảm thấy rằng cú pháp "sử dụng con mèo vô dụng" dễ đọc hơn và shell nên có đủ thông tin để tự động loại bỏ con mèo vô dụng. Cái cat
được định nghĩa trong tiêu chuẩn POSIX vì vậy shell nên được phép thực hiện bên trong thay vì sử dụng nhị phân trong đường dẫn. Shell thậm chí có thể chứa triển khai chỉ cho chính xác một phiên bản đối số và dự phòng thành nhị phân trong đường dẫn.
lseek
hành vi vẫn được xác định và có thể gây ra kết quả khác, hành vi chặn khác nhau có thể có ý nghĩa về mặt ngữ nghĩa, v.v. Bạn có thể thay đổi nếu bạn biết các lệnh khác là gì và biết rằng chúng không quan tâm, hoặc nếu bạn không quan tâm đến khả năng tương thích ở cấp độ đó, nhưng lợi ích là khá nhỏ. Tôi tưởng tượng sự thiếu lợi ích thúc đẩy tình hình nhiều hơn chi phí tuân thủ.
cat
chính nó, hoặc bất kỳ tiện ích nào khác. Nó cũng được phép biết các tiện ích khác thuộc hệ thống hoạt động như thế nào (ví dụ: nó có thể biết cách grep
triển khai bên ngoài đi kèm với hệ thống ). Điều này là hoàn toàn khả thi để làm, vì vậy nó hoàn toàn công bằng để tự hỏi tại sao họ không.
grep
. Và sed
. Và awk
. Và du
. Và có bao nhiêu hàng trăm nếu không phải hàng ngàn tiện ích khác?