在 bash 中从管道读取时"读取"不超时



我使用创建一个管道

mkfifo /tmp/foo.pipe

现在,我想尝试从管道中读取最多2秒,所以我执行

read -t 2 line < /tmp/foo.pipe

没有发生超时。Read只是坐在那里等待管道的输入。

手册上说"read"应该用于命名管道。有人知道为什么会发生这种事吗?

ls -al /tmp/foo.pipe
prw-r----- 1 foo bar 0 Jun 22 19:06 /tmp/foo.pipe

在调用read内建之前,您的shell正在阻塞open()调用。

在Linux上,您可以同时打开FIFO进行读写,以防止打开时出现阻塞;这是不可移植的,但可以随心所欲。

read -t 2 <>/tmp/foo.pipe

改编自:带有非阻塞读取的Bash脚本

如果您只想从FIFO:中清除(和丢弃)数据

dd iflag=nonblock if=/tmp/foo.pipe of=/dev/null &> /dev/null

您的shell是支撑它的shell,它正试图从管道中读取数据以将数据馈送到read命令中,由于它没有得到任何东西,它只是坐在那里等待。

TMOUT=2
read line < /tmp/foo.pipe

相关内容

  • 没有找到相关文章

最新更新