Você não especificou o shell, portanto, em geral, os pipes nomeados seriam o caminho mais fácil. No entanto, se o seu shell os suportar, isso pode ser um bom caso de uso para coprocessos.
Como você usa o comando coproc no Bash
In
a | cmd | b,afeeds data tocmdandbreads its output. Runningcmdas a co-process allows the shell to be bothaandb.
No bash:
coproc ./chess_1
./chess_2 < "${COPROC[0]}" > "${COPROC[1]}"
O post vinculado também fala sobre as desvantagens dos coprocessos e tem exemplos de uso de pipes nomeados (via mkfifo ).