![使用重定向操作时出现意外行为](https://linux22.com/image/1058360/%E4%BD%BF%E7%94%A8%E9%87%8D%E5%AE%9A%E5%90%91%E6%93%8D%E4%BD%9C%E6%97%B6%E5%87%BA%E7%8E%B0%E6%84%8F%E5%A4%96%E8%A1%8C%E4%B8%BA.png)
以下命令用于根据 GNU 手册复制输入文件描述符:
exec 6<&0
但是当我像这样更改重定向运算符时,即使文件描述符“0”指向 stdin,该命令仍然有效:
exec 6>&0
有人能解释一下这背后的原因吗?
答案1
<&
Bash 对和执行完全相同的操作>&
,即它使用dup()
系统调用来复制文件描述符。
当文件描述符以与打开方式相反的方式进行读取或写入时,将发生由于尝试写入已打开以进行读取的文件等而引起的任何错误。
最初,交互式 Bash /dev/tty
以文件描述符 0、1 和 2 的形式打开,以供读写。
看exec 3<&1 做什么在 Unix 和 Linux SE 上,用户 cuonglm 不厌其烦地使用 来记录这种行为strace
。