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.