Banyak orang menggunakan oneliners dan skrip yang berisi kode di sepanjang baris
cat "$MYFILE" | command1 | command2 > "$OUTPUT"
Yang pertama cat
sering 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 command1
dan cukup arahkan stdin
ke 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 cat
didefinisikan 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.
lseek
masih 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.
cat
sendiri, atau utilitas lainnya. Ini juga memungkinkan untuk mengetahui bagaimana utilitas lain yang termasuk ke dalam sistem kerja (misalnya dapat mengetahui bagaimana eksternal grep
implementasi 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?