Bash 当所有数据都从管道中读取时,如何跳转无限while循环?
它很好用。 这里有两行我不明白Bash 当所有数据都从管道中读取时,如何跳转无限while循环?,bash,pipe,Bash,Pipe,它很好用。 这里有两行我不明白 vim pipe.sh #!/bin/bash fifo_file=fifo.pipe mkfifo $fifo_file exec 6<>$fifo_file rm $fifo_file DateWrite () { i=0 while [ $i -lt 100 ] do str=`date` i=$(( i+1 )) echo "$i $str" done } wr
vim pipe.sh
#!/bin/bash
fifo_file=fifo.pipe
mkfifo $fifo_file
exec 6<>$fifo_file
rm $fifo_file
DateWrite ()
{
i=0
while [ $i -lt 100 ]
do
str=`date`
i=$(( i+1 ))
echo "$i $str"
done
}
writers=()
for (( i=0; i<10; i++ ))
do
( DateWrite >&6 ) & writers+=($!)
done
while read date_time
do
echo $date_time >> output.file
done <&6 &
for writer in "${writers[@]}"; do
wait "$writer"
done
exec 6>&-
这意味着什么?您的while循环将尝试从管道中读取数据,只要它是开放的,可以写入数据。完成所有写入程序后,可以显式关闭管道
writers=()
( DateWrite >&6 ) & writers+=($!)
您的while循环将尝试从管道中读取数据,只要它是开放的。完成所有写入程序后,可以显式关闭管道
writers=()
( DateWrite >&6 ) & writers+=($!)
我试过这个方法,失败了。请检查一下。我不确定你要我检查什么。这段代码对我很有用。请查看我的更新,有两行我不明白,您介意解释一下吗?它们正在收集数组中后台编写器的进程ID,以便您知道以后要等待哪些进程。我尝试了该方法,失败了。请检查。我不确定您希望我检查什么。这段代码对我很有用。请看我的更新,有两行我不明白,你介意解释一下吗?它们正在收集数组中后台编写器的进程ID,以便你知道以后要等待哪些进程。
fifo_file=fifo.pipe
mkfifo $fifo_file
exec 6<>$fifo_file
rm $fifo_file
writers=()
for (( i=0; i<10; i++ ))
do
( DateWrite >&6 ) & writers+=($!)
done
while read date_time
do
echo $date_time >> output.file
done <&6 &
for writer in "${writers[@]}"; do
wait "$writer"
done
exec 6>&-