Tengo este script de prueba:
#!/usr/bin/env bash
fif="foooz"; rm "$fif" ; mkfifo "$fif"
( cat "$fif" | cat && echo "1") &
sleep 0.1
( cat "$fif" | cat && echo "2") &
sleep 0.1
( cat "$fif" | cat && echo "3") &
echo "first" > "$fif"
wait;
el resultado que obtengo es variado, tengo estas variedades:
first
1
first
2
first
1
2
first
3
Mi pregunta es: ¿por qué no importa/respeta el orden en el que se adjuntan los lectores a la tubería nombrada? ¿Parece poco convincente que sea casi aleatorio?
Respuesta1
F=example.fifo
mkfifo $F
cat $F | tee -a >( read B; echo "B=$B" >&2 ) >( read C; echo "C=$C" >&2 ) | (read A; echo "A=$A") &
echo OK > $F
A=OK
B=OK
C=OK
rm $F
- ">()" es sustitución de procesos
- funcionamiento interno en Taquí.
Tenga en cuenta que las 3 salidas se ejecutan al mismo tiempo (pruebe agregando sleep 1;
), si desea esperar a que A se complete antes de iniciar B, simplemente use un bucle o una lista;
F=example.fifo
mkfifo $F
cat $F | ( read O; echo "A=$O"; echo "B=$O"; echo "C=$O") &
echo OK > $F
A=OK
B=OK
C=OK
rm $F