Tôi đã rất ngạc nhiên lúc đầu. Tuy nhiên sau khi đọc câu trả lời, và làm một cuộc điều tra nhỏ, nó có vẻ đơn giản. Vì vậy, đây là những gì tôi đã tìm thấy. (cuối cùng không có gì bất ngờ.)
Trước khi chuyển hướng stdin, stdout và stderr như mong đợi được kết nối với cùng một thiết bị.
#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
Do đó, sau hầu hết các hướng dẫn lại (đó là nếu stderr) không được chuyển hướng. stderr vẫn được kết nối với thiết bị đầu cuối. Do đó, nó có thể được đọc, để có được đầu vào bàn phím.
Điều duy nhất ngăn chặn các tệp đang được sử dụng theo hướng bất ngờ là quy ước và các đường ống là đơn hướng.
Một ví dụ khác, hãy thử:
cat | less
Điều này sai sau một trang, khi less
cố gắng đọc thiết bị đầu cuối (điều này không gây ngạc nhiên, cũng như cat
đọc thiết bị đầu cuối).
/dev/tty
là bí ẩn hơn, nó không phải là một liên kết vào /proc/self
.
#ctrl-alt-delor:~$
#↳ ll /dev/tty
crw-rw-rw- 1 root tty 5, 0 Jun 29 09:18 /dev/tty
Xem những mối quan hệ giữa thiết bị đầu cuối kiểm soát hiện tại của tôi và `/ dev / tty`? cho một cuộc thám hiểm. Cảm ơn @StephenKitt cho liên kết.
/dev/tty
, xem câu hỏi này .