bash`read -t`在pipe道上不起作用

演示这个非常简单的方法是运行

mkfifo /tmp/a read -t 1 a < /tmp/a 

阅读永不回报。

Bash手册说:这个选项只有在读取从terminal,pipe道或其他特殊文件读取input时才有效; 从常规文件读取时不起作用

但是/ tmp / a是一个pipe道,ls的输出是

 ls -l /tmp/a prw-r--r-- 1 root root 0 Feb 4 22:18 /tmp/a 

bash版本是:

GNU bash,版本4.3.46(1)-release(x86_64-pc-linux-gnu)Copyright(C)2013 Free Software Foundation,Inc.

操作系统是:

 Ubuntu 16.04.1 LTS 

当你从管道上读书时,也需要有人写信给管道。 “管道”只是一个沟通机制。 它不会“自动生成”任何输入; 它只是将其输入传递到输出端。 看来你只是在读,但没有人写入/tmp/a

read等待输入时,从另一个终端echo hello > /tmp/a ,您将看到read返回并且a具有值“hello”。

请阅读有关管道的详细信息: http : //man7.org/linux/man-pages/man7/pipe.7.html