Câu trả lời "dứt khoát" dĩ nhiên được mang đến cho bạn bởi The Usless Use of cat
Award .
Mục đích của mèo là ghép các tệp (hoặc "catenate"). Nếu đó chỉ là một tệp, việc kết hợp nó với không có gì là lãng phí thời gian và khiến bạn mất một quá trình.
Con mèo tức thời chỉ để mã của bạn đọc khác nhau làm cho chỉ một quá trình và một bộ luồng đầu vào / đầu ra không cần thiết. Thông thường, sự cố thực sự trong các tập lệnh của bạn sẽ là các vòng lặp không hiệu quả và xử lý Actuall. Trên hầu hết các hệ thống hiện đại, một phần bổ sung cat
sẽ không giết chết hiệu suất của bạn, nhưng hầu như luôn có một cách khác để viết mã của bạn.
Hầu hết các chương trình, như bạn lưu ý, có thể chấp nhận một đối số cho tệp đầu vào. Tuy nhiên, luôn có phần mềm dựng sẵn <
có thể được sử dụng ở bất cứ nơi nào có luồng STDIN được mong đợi sẽ giúp bạn tiết kiệm một quy trình bằng cách thực hiện công việc trong quy trình shell đang chạy.
Bạn thậm chí có thể sáng tạo với WHERE bạn viết nó. Thông thường nó sẽ được đặt ở cuối lệnh trước khi bạn chỉ định bất kỳ chuyển hướng đầu ra hoặc đường ống như thế này:
sed s/blah/blaha/ < data | pipe
Nhưng nó không phải theo cách đó. Nó thậm chí có thể đến đầu tiên. Ví dụ, mã ví dụ của bạn có thể được viết như thế này:
< data \
sed s/bla/blaha/ |
grep blah |
grep -n babla
Nếu khả năng đọc tập lệnh là mối quan tâm của bạn và mã của bạn đủ lộn xộn thì việc thêm một dòng cho cat
dự kiến sẽ giúp dễ theo dõi hơn, có nhiều cách khác để làm sạch mã của bạn. Một cái mà tôi sử dụng rất nhiều giúp tạo ra các kịch bản dễ dàng tìm ra sau này là chia các ống thành các bộ logic và lưu chúng trong các hàm. Mã script sau đó trở nên rất tự nhiên và bất kỳ một phần nào của đường ống cũng dễ gỡ lỗi hơn.
function fix_blahs () {
sed s/bla/blaha/ |
grep blah |
grep -n babla
}
fix_blahs < data
Sau đó bạn có thể tiếp tục với fix_blahs < data | fix_frogs | reorder | format_for_sql
. Một pipleline đọc như thế thực sự dễ theo dõi, và các thành phần riêng lẻ có thể được gỡ lỗi dễ dàng trong các chức năng tương ứng của chúng.