Seperti kebanyakan dari Anda telah melakukannya berkali-kali, akan lebih mudah untuk melihat teks panjang menggunakan less :
some_command | less
Sekarang stdinnya terhubung ke pipa (FIFO). Bagaimana itu masih bisa membaca perintah seperti atas/bawah/keluar?
Jawaban yang Diterima:
Seperti yang disebutkan oleh William Pursell, less membaca penekanan tombol pengguna dari terminal. Ini secara eksplisit membuka /dev/tty , terminal pengontrol; yang memberinya deskriptor file, terpisah dari input standar, dari mana ia dapat membaca input interaktif pengguna. Itu dapat secara bersamaan membaca data untuk ditampilkan dari input standarnya jika perlu. (Bisa juga menulis langsung ke terminal jika perlu.)
Anda dapat melihat ini terjadi dengan menjalankan
some_command | strace -o less.trace -e open,read,write less
Bergerak di sekitar input, keluar dari less , dan lihat isi less.trace :Anda akan melihatnya membuka /dev/tty , dan membaca dari kedua file deskriptor 0 dan yang mana saja yang dikembalikan ketika dibuka /dev/tty (kemungkinan 3).
Ini adalah praktik umum untuk program yang ingin memastikan mereka membaca dari dan menulis ke terminal. Salah satu contohnya adalah SSH, mis. ketika meminta kata sandi atau frasa sandi.
Seperti yang dijelaskan oleh schily, if /dev/tty tidak bisa dibuka, less akan membaca dari kesalahan standarnya (deskriptor file 2). less penggunaan /dev/tty diperkenalkan dalam versi 177, dirilis pada 2 April 1991.
Jika Anda mencoba menjalankan cat /dev/tty | less , seperti yang disarankan oleh Hagen von Eitzen, less akan berhasil membuka /dev/tty tetapi tidak akan mendapatkan masukan apa pun darinya sampai cat menutupnya. Jadi Anda akan melihat layar kosong, dan tidak ada yang lain sampai Anda menekan Ctrl C untuk membunuh cat (atau membunuhnya dengan cara lain); lalu less akan menampilkan apa pun yang Anda ketik saat cat sedang berjalan, dan memungkinkan Anda untuk mengontrolnya.