İlk başta şaşırdım. Ancak cevapları okuduktan ve biraz araştırma yaptıktan sonra basit görünüyor. İşte bulduğum şey. (sonunda sürpriz olmadı.)
Yeniden yönlendirmeden önce stdin, stdout ve stderr beklendiği gibi aynı cihaza bağlanır.
#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
Bu nedenle, çoğu yeniden yönlendirmeden sonra (yani stderr) yeniden yönlendirilmez. stderr hala terminale bağlı. Bu nedenle klavye girişi almak okunabilir.
Beklenmedik yönde kullanılan dosyaları durduran tek şey kongre ve borular tek yönlüdür.
Başka bir örnek deneyin:
cat | less
Bir sayfadan sonra less
, terminali okumaya çalışıldığında bu yanlış gidiyor (terminali cat
de okurken bu sürpriz değil ).
/dev/tty
daha gizemli, içine bir bağlantı değil /proc/self
.
#ctrl-alt-delor:~$
#↳ ll /dev/tty
crw-rw-rw- 1 root tty 5, 0 Jun 29 09:18 /dev/tty
Bkz benim şimdiki kontrol terminali ve `/ dev / tty` arasında ne ilişki? bir açıklama için. Bağlantı için @StephenKitt'e teşekkürler.
/dev/tty
, bkz bu soruyu .