两个窗口,同一用户,带有 bash 提示。在 window-1 中输入:
$ mkfifo f; exec <f
Run Code Online (Sandbox Code Playgroud)
所以 bash 现在试图从映射到命名管道的文件描述符 0 中读取f
。在窗口 2 中键入:
$ echo ls > f
Run Code Online (Sandbox Code Playgroud)
现在 window-1 打印一个 ls 然后 shell 死了。为什么?
下一个实验:再次打开 window-1 exec <f
。在窗口 2 中键入:
$ exec 3>f
$ echo ls >&3
Run Code Online (Sandbox Code Playgroud)
在上面的第一行之后,window-1 唤醒并打印提示。为什么?在上面的第二行之后,window-1 打印ls
输出并且 shell 保持活动状态。为什么?事实上,现在在window-2中,echo ls > f
并没有关闭window-1外壳。
答案一定与window-2 中引用命名管道的文件描述符 3的存在有关?!