Pertama, cat
menulis ke output standar, yang belum tentu terminal, bahkan jika cat
diketik sebagai bagian dari perintah ke shell interaktif. Jika Anda benar-benar membutuhkan sesuatu untuk ditulis ke terminal bahkan ketika output standar dialihkan, itu tidak mudah (Anda perlu menentukan terminal mana, dan mungkin bahkan tidak ada satu jika perintah dijalankan dari skrip), meskipun satu dapat (ab) menggunakan output kesalahan standar jika perintah hanyalah bagian dari pipa. Tetapi karena Anda menunjukkan bahwa cat
sebenarnya melakukan pekerjaan itu, saya kira Anda tidak bertanya tentang situasi seperti itu.
Jika tujuan Anda adalah mengirimkan apa yang ditulis ke output standar ke dalam pipa, maka menggunakan cat
akan memenuhi syarat untuk Penggunaan Cat Award yang Tidak Berguna , karena cat file | pipeline
(di mana pipeline
singkatan dari pipa apa pun) dapat dilakukan dengan lebih efisien <file pipeline
. Tetapi sekali lagi, dari kata-kata Anda, saya menyimpulkan bahwa ini bukan niat Anda.
Jadi tidak begitu jelas apa yang Anda khawatirkan. Jika Anda merasa cat
terlalu lama untuk mengetik, Anda dapat mendefinisikan alias satu atau dua karakter (masih ada beberapa nama seperti itu yang tetap tidak digunakan dalam Unix standar). Namun jika Anda khawatir cat
menghabiskan siklus yang tidak berguna, Anda seharusnya tidak melakukannya.
Jika ada program null
yang tidak menggunakan argumen dan hanya menyalin input standar ke output standar (objek netral untuk jaringan pipa), Anda dapat melakukan apa yang Anda inginkan <file null
. Tidak ada program seperti itu, meskipun akan mudah untuk menulis (program C dengan main
fungsi satu-baris dapat melakukan pekerjaan itu), tetapi memanggil cat
tanpa argumen (atau cat -
jika Anda ingin secara eksplisit) melakukan hal itu.
Jika ada nocat
program yang mengambil tepat satu argumen nama file, mencoba untuk membuka file, mengeluh jika tidak bisa, dan sebaliknya mulai menyalin dari file ke output standar, maka itu akan menjadi apa yang Anda minta. Hanya sedikit lebih sulit untuk menulis daripada null
, pekerjaan utama adalah membuka file, menguji, dan mungkin mengeluh (jika Anda teliti, Anda mungkin juga ingin memasukkan tes bahwa ada satu argumen, dan mengeluh sebaliknya). Tetapi sekali lagi cat
, sekarang disediakan dengan satu argumen, tidak hanya itu, sehingga tidak perlu untuk nocat
program apa pun .
Setelah Anda berhasil menulis nocat
program, mengapa berhenti pada satu argumen? Membungkus kode ke dalam loop for(;*argp!=NULL;++argp)
benar-benar tidak ada usaha sama sekali, menambahkan paling banyak beberapa instruksi mesin ke biner, dan menghindari keharusan mengeluh tentang sejumlah argumen yang salah (yang menyimpan lebih banyak instruksi). Merusak versi primitif dari cat
, menyatukan file. (Sejujurnya Anda perlu men-tweak sedikit sehingga tanpa argumen berperilaku seperti itu null
.)
Tentu saja dalam cat
program yang sebenarnya , mereka menambahkan beberapa lonceng dan peluit, karena mereka selalu melakukannya. Tetapi intinya adalah bahwa aspek "gabungan" dari cat
biaya benar-benar tidak ada usaha sama sekali, baik untuk programmer maupun untuk mesin yang mengeksekusinya. Fakta yang cat
merangkum null
dan nocat
menjelaskan tidak adanya program tersebut. Hindari menggunakan cat
dengan argumen tunggal jika hasilnya masuk ke jalur pipa, tetapi jika itu digunakan hanya untuk menampilkan konten file di terminal, bahkan halaman yang saya tautkan untuk mengakui bahwa ini adalah penggunaan yang bermanfaat cat
, jadi jangan ragu.
Anda dapat menguji yang cat
benar-benar diimplementasikan oleh loop sederhana di sekitar nocat
fungsi hypthetical , dengan memanggil cat
dengan beberapa nama file yang salah satu nama tidak valid, bukan pada posisi pertama: daripada mengeluh segera bahwa file ini tidak ada, cat
pertama-tama dump terlebih dahulu sebelumnya file yang valid, dan kemudian mengeluh tentang file yang tidak valid (setidaknya itulah perilaku kucing saya).