14

我正在尝试写入使用mkfifo制作的命名管道。但是当我运行命令 (ex)ls > myNamedPipe时,我无法再将命令输入 bash。我仍然可以写字符,仅此而已。

4

1 回答 1

22

命名管道保持打开状态,直到您从其他地方读取它。这是为了允许不同进程之间的通信。

尝试:

mkfifo fifo
echo "foo" > fifo

然后打开另一个终端并输入:

cat fifo

如果您返回第一个终端,您会注意到您现在可以输入其他命令。

另请参阅反向发生的情况:

# terminal 1
cat fifo

# terminal 2
echo "foo" > fifo

# and now you can see "foo" on terminal 1

如果您希望终端在尝试向 fifo 写入内容时不要“挂起”,请在 fifo 上附加一个文件描述符:

mkfifo fifo
exec 3<> fifo
echo "foo" > fifo
echo "bar" > fifo
于 2013-03-13T04:31:49.297 回答