Com base na resposta de Mark A. , tive que fazer um pequeno ajuste para que ele funcionasse no meu Mac (pelo menos no macOS Mojave versão 10.14.4)
mkfifo a
mkfifo b
nc 127.0.0.1 8000 < b > a &
nc -l 8001 < a > b &
printf "" > a
Essa declaração printf parece ser crucial. Caso contrário, o comando netcat para conectar-se à porta 8000 nunca tentará realmente se conectar, e o comando netcat para escutar na porta 8001 nunca escutará na porta 8001. Sem o printf, sempre que eu tentasse conectar-me à porta 8001, obteria Ligação recusada.
Minha suposição é que o netcat deve de alguma forma bloquear o stdin (talvez esteja tentando lê-lo por algum motivo) antes de realmente executar qualquer operação do soquete. Como tal, sem a instrução printf escrevendo para fifo a, o comando netcat nunca começará a escutar na porta 8001.
Nota: eu teria deixado uma resposta na postagem de Mark, mas ainda não tenho reputação.