Banyak orang menggunakan oneliners dan skrip yang berisi kode di sepanjang baris
cat "$MYFILE" | command1 | command2 > "$OUTPUT"
Yang pertama catsering disebut "penggunaan kucing yang tidak berguna" karena secara teknis ia memerlukan memulai proses baru (sering /usr/bin/cat) di mana ini dapat dihindari jika perintah telah
< "$MYFILE" command1 | command2 > "$OUTPUT"
karena itu shell hanya perlu memulai command1dan cukup arahkan stdinke file yang diberikan.
Mengapa shell tidak melakukan konversi ini secara otomatis? Saya merasa bahwa sintaks "penggunaan kucing yang tidak berguna" lebih mudah dibaca dan shell harus memiliki informasi yang cukup untuk menyingkirkan kucing yang tidak berguna secara otomatis. Ini catdidefinisikan dalam standar POSIX sehingga shell harus diizinkan untuk mengimplementasikannya secara internal daripada menggunakan biner di jalur. Shell bahkan bisa memuat implementasi hanya untuk satu versi argumen dan mundur ke biner di jalur.
lseekmasih didefinisikan perilaku dan dapat menyebabkan hasil yang berbeda, perilaku memblokir yang berbeda dapat bermakna secara semantik, dll. Ini akan diizinkan untuk melakukan perubahan jika Anda tahu apa perintah lain dan tahu mereka tidak peduli, atau jika Anda tidak peduli tentang kompatibilitas pada tingkat itu, tetapi manfaatnya cukup kecil. Saya membayangkan kurangnya manfaat mendorong situasi lebih dari biaya kesesuaian.
catsendiri, atau utilitas lainnya. Ini juga memungkinkan untuk mengetahui bagaimana utilitas lain yang termasuk ke dalam sistem kerja (misalnya dapat mengetahui bagaimana eksternal grepimplementasi yang datang dengan sistem berperilaku). Ini benar-benar layak untuk dilakukan, jadi sepenuhnya adil untuk bertanya-tanya mengapa mereka tidak melakukannya.
grep. Dan sed. Dan awk. Dan du. Dan berapa ratus jika tidak ribuan utilitas lainnya?