Думаю, с "настоящим" конвейером это невозможно.
Вместо этого вы можете использовать именованный канал FIFO (, см.man mkfifo
)или (более элегантный, но более сложный )сокет Unix (AF _UNIX ).
./background-proc </path/to/fifo &
cat >/path/to/fifo
# typing commands into cat
Я не разработчик, поэтому мое отношение к сокетам только socat
. Но это может помочь в качестве начала.
Вам нужен "сервер", который взаимодействует с вашей программой. Такой конвейер будет запущен в фоновом режиме :
.socat UNIX-LISTEN:/tmp/sockettest,fork STDOUT | sed 's/./&_/g'
sed
предназначен только для тестирования.
Затем вы запускаете один или несколько
socat STDIN UNIX-CONNECT:/tmp/sockettest
Если у вас есть программа, которая генерирует команды для вашей фоновой программы, вы также можете использовать здесь конвейер:
cmd_prog | socat STDIN UNIX-CONNECT:/tmp/sockettest
Преимущество по сравнению с FIFO в том, что (с опцией fork
на стороне сервера )можно отключать и снова подключать клиента. При использовании FIFO вам потребуются хитрости для поддержания работы принимающей стороны :
while true; do cat /path/to/fifo; done | background_prog