Replace this:
loop(){
for i in $(seq 1 $N); do
read tmp < $FIFO
echo "$i out"
done
}
Wherein:
loop(){
for i in $(seq 1 $N); do
read tmp
echo "$i out"
done < $FIFO
}
This keeps the fifo open, not re-opening and re-closing it with each cycle.
FIFOs are quite complex:
, . read tmp < $FIFO , FIFO? read , FIFO , .
exec
. FIFO :
#!/bin/sh
fifo=/tmp/$$.myfifo
mkfifo "$fifo"
echo $'1\n2\n3\n4'>"$fifo"
for i in {1..4}
do
read tmp
echo $tmp
done <"$fifo"
script echo, , FIFO. , read tmp , script .
exec :
#!/bin/sh
fifo=/tmp/$$.myfifo
mkfifo "$fifo"
exec 3<>"$fifo"
echo $'1\n2\n3\n4'>&3
for i in {1..4}
do
read -u3 tmp
echo $tmp
done
script . , . , echo FIFO, FIFO. , , read -u3 tmp.