Примечание: Вопрос был отредактирован (трубопровод поменялся местами) после написания этой статьи. Я обновлю его, если найду на это время.
Каждая часть конвейера запускается одновременно с другими. Единственное, что синхронизирует конвейер - это ввод/вывод, т.е. процесс, ожидающий, пока другой процесс в конвейере прочитает его вывод или предоставит ввод.
Вашему somescript
скрипту придется ждать и следить за вводом от nc
для запроса, прежде чем вывести имя файла.
Не зная, что делает этот скрипт, я могу только предположить, что у него могут быть проблемы с разбором.
Вы не указали оболочку, поэтому, как правило, проще всего использовать именованные каналы. Однако, если ваша оболочка их поддерживает, это может быть хорошим вариантом использования сопроцессов.
Как использовать команду coproc в Bash?
В
a | cmd | b
,a
передает данные вcmd
, аb
считывает его вывод. Выполнениеcmd
в качестве сопроцесса позволяет оболочке быть одновременноa
иb
.
В bash:
coproc ./chess_1
./chess_2 < "${COPROC[0]}" > "${COPROC[1]}"
Связанный пост также говорит о недостатках сопроцессов и содержит примеры использования именованных каналов (через mkfifo
).