Awalnya saya terkejut. Namun setelah membaca jawabannya, dan melakukan sedikit penyelidikan, sepertinya sederhana. Jadi inilah yang saya temukan. (pada akhirnya tidak ada kejutan.)
Sebelum pengalihan stdin, stdout, dan stderr seperti yang diharapkan terhubung ke perangkat yang sama.
#ctrl-alt-delor:~$
#↳ ll /dev/std*
lrwxrwxrwx 1 root root 15 Jun 3 20:58 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Jun 3 20:58 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Jun 3 20:58 /dev/stdout -> /proc/self/fd/1
#ctrl-alt-delor:~$
#↳ ll /proc/self/fd/*
lrwx------ 1 richard richard 64 Jun 30 19:14 /proc/self/fd/0 -> /dev/pts/12
lrwx------ 1 richard richard 64 Jun 30 19:14 /proc/self/fd/1 -> /dev/pts/12
lrwx------ 1 richard richard 64 Jun 30 19:14 /proc/self/fd/2 -> /dev/pts/12
Oleh karena itu setelah sebagian besar arahan ulang (yaitu jika stderr) tidak dialihkan. stderr masih terhubung ke terminal. Karena itu dapat dibaca, untuk mendapatkan input keyboard.
Satu-satunya hal yang menghentikan file yang digunakan dalam arah yang tidak terduga adalah konvensi, dan pipa-pipa itu searah.
Contoh lain, coba:
cat | less
Ini salah setelah halaman, ketika less
mencoba membaca terminal (ini tidak mengherankan, seperti cat
juga membaca terminal).
/dev/tty
lebih misterius, itu bukan tautan ke /proc/self
.
#ctrl-alt-delor:~$
#↳ ll /dev/tty
crw-rw-rw- 1 root tty 5, 0 Jun 29 09:18 /dev/tty
Lihat apa hubungan antara terminal pengendali saya saat ini dan `/ dev / tty`? untuk penjelasan. Terima kasih kepada @StephenKitt untuk tautannya.
/dev/tty
, lihat pertanyaan ini .