Você tem o < fifo0
no lugar errado. Você quer que seja stdin de engine
, não tee
:
mkfifo fifo0 fifo1 fifo2
< fifo0 ./engine | tee fifo1 fifo2 &
./bot1 > fifo0 < fifo1 &
./bot2 > fifo0 < fifo2
Note que muitos utilitários começam a armazenar em buffer sua saída quando ela não vai para um dispositivo tty (aqui um pipe (ou possivelmente um par de soquetes se o shell for ksh93)). Nos sistemas GNU e FreeBSD, você pode tentar usar o comando stdbuf
para desabilitar esse buffer:
mkfifo fifo0 fifo1 fifo2
< fifo0 stdbuf -o0 ./engine | tee fifo1 fifo2 &
stdbuf -o0 ./bot1 > fifo0 < fifo1 &
stdbuf -o0 ./bot2 > fifo0 < fifo2