两个窗口,同一用户,带有bash提示。在window-1中输入:
$ mkfifo f; exec <f
因此,bash现在正尝试从文件描述符0中读取文件,该文件描述符0映射到命名管道f
。在window-2中输入:
$ echo ls > f
现在window-1打印一个ls,然后外壳消失。为什么?
下一个实验:使用再次打开window-1 exec <f
。在window-2中输入:
$ exec 3>f
$ echo ls >&3
在上面的第一行之后,window-1唤醒并显示提示。为什么?在上面的第二行之后,window-1打印ls
输出,并且shell保持活动状态。为什么?实际上,现在在window-2中,echo ls > f
不会关闭window-1外壳。
答案必须与window-2中引用命名管道的文件描述符3 的存在有关!
exec 3>f
运行后第一个shell给出提示的原因。(要点,您的意思是“ 写模式”吗?)
exec <f
,bash
不尝试从中读取后f
,它首先尝试将其打开。该open()
不会返回,直到有一些做的过程中写入模式到管道(此时管将被实例化,并且外壳将从中读取输入)另一个打开。