我对丢失数据感到有点惊讶。我想退出状态警告我有什么事发生了,但是有没有办法恢复部分读取(如果有的话)?请注意,'foo' 不会出现在输出的任何位置。写入了,读取等待满行超时,数据消失。 我想我可以使用退出状态来重试。
$ ( exec 6< <(echo -n "foo";
sleep 2; echo bar);
read -t 0.5 -u 6 baz;
echo $?;
sleep 3;
read -u 6 baz2;
echo $?;
declare -p baz baz2 )
142
0
declare -- baz=""
declare -- baz2="bar"
最佳答案
似乎是一个错误。我不能用 bash 5.1.8 重现这个。
$ cat fd-6.bash
( exec 6< <(echo -n "foo";
sleep 2; echo bar);
read -t 0.5 -u 6 baz;
echo $?;
sleep 3;
read -u 6 baz2;
echo $?;
declare -p baz baz2 )
输出确实包含 foo。
$ bash fd-6.bash
142
0
declare -- baz="foo"
declare -- baz2="bar"
但是,bash 4.3 确实像您描述的那样运行,因此您应该升级。
$ bash-4.3 fd-6.bash
142
0
declare -- baz=""
declare -- baz2="bar"
关于bash - 使用超时触发器在 bash 'read' 中丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51921849/