Según la respuesta de Mark A. , tuve que hacer un pequeño ajuste para que funcione en mi Mac (al menos en macOS Mojave Versión 10.14.4)
mkfifo a
mkfifo b
nc 127.0.0.1 8000 < b > a &
nc -l 8001 < a > b &
printf "" > a
Esa declaración printf parece ser crucial. De lo contrario, el comando netcat para conectarse al puerto 8000 nunca intentará conectarse realmente, y el comando netcat para escuchar en el puerto 8001 nunca escuchará en el puerto 8001. Sin el printf, cada vez que intentara conectarme al puerto 8001 obtendría conexión denegada.
Mi suposición es que netcat debe bloquear de alguna manera en stdin (tal vez esté tratando de leerlo por alguna razón) antes de realizar cualquier operación de Socket. Como tal, sin la declaración printf escrita en fifo a, el comando netcat nunca comenzará a escucharse en el puerto 8001.
Nota: Hubiera dejado una respuesta en la publicación de Mark, pero aún no tengo reputación.