考虑下面的例子中,模仿其10秒后给出的输出命令:exec 5< <(sleep 10; pwd)
Linux系统:检查是否文件描述符可以读取
在Solaris中,如果我检查文件描述符早于10秒,我可以看到它的大小为0,这告诉我它还没有填充数据。我可以简单地检查每一秒,直到该文件的测试条件满足(不同于0),然后抠数据:
while true; do
if [[ -s /proc/$$/fd/5 ]]; then
variable=$(cat <&5)
break
fi
sleep 1
done
但对于Linux来说,我不能这样做(红帽,Debian的等)。无论数据是否保存,所有文件描述符的大小均为64字节。对于需要花费大量时间来转储它们的输出的各种命令,我不知道我应该何时读取文件描述符。不,我不想等到cat <&5
完成,我需要知道什么时候我应该首先执行cat
。因为我正在使用此机制来发出同时发出的命令并将其输出分配给相应的文件描述符。如前所述,这在Solaris中非常适用。
完美地工作,谢谢。我知道'read'能够......从文件描述符中读取,但从来没有想过使用'-t'会做什么。我删除了'dummy'变量,因为即使数据可用,语法也没有它,它将不会被填充。 –