Виходячи з відповіді Марка А. , мені довелося зробити невеликий твіт, щоб він працював на моєму Mac (принаймні, на macOS Mojave версії 10.14.4)
mkfifo a
mkfifo b
nc 127.0.0.1 8000 < b > a &
nc -l 8001 < a > b &
printf "" > a
Це твердження printf видається вирішальним. Інакше команда netcat для підключення до порту 8000 ніколи насправді не намагатиметься підключитися, а команда netcat для прослуховування через порт 8001 ніколи насправді не прослухає порт 8001. Без printf кожен раз, коли я намагався би підключитися до порту 8001, отримав би З'єднання відхилено.
Моє припущення, що netcat повинен якось блокуватися на stdin (можливо, він намагається прочитати його чомусь), перш ніж робити фактично будь-які операції Socket. Таким чином, без запису printf, записаного на fifo a, команда netcat ніколи не почне слухати на порт 8001.
Примітка. Я б залишив відповідь на пошті Марка, але репутації у мене поки немає.