Eu acho que isso é impossível com um pipeline "real".
Em vez disso, você pode usar um FIFO (pipe nomeado, veja man mkfifo
) ou (mais elegante, mas mais complicado) um socket Unix (AF_UNIX).
./background-proc </path/to/fifo &
cat >/path/to/fifo
# typing commands into cat
Eu não sou um desenvolvedor, então minha única relação com sockets é socat
. Mas isso pode ajudar como um começo.
Você precisa de um "servidor" que se comunique com o seu programa. Tal pipeline seria iniciado em segundo plano:
socat UNIX-LISTEN:/tmp/sockettest,fork STDOUT | sed 's/./&_/g'
O sed
é apenas para testes.
Então você começa um ou mais
socat STDIN UNIX-CONNECT:/tmp/sockettest
Se você tiver um programa que gere os comandos para seu programa em segundo plano, use um pipeline aqui também:
cmd_prog | socat STDIN UNIX-CONNECT:/tmp/sockettest
A vantagem em comparação com um FIFO é que (com a opção fork
no lado do servidor) você pode desconectar e reconectar o cliente. Usando um FIFO, você precisaria de truques para manter o lado de recebimento em execução:
while true; do cat /path/to/fifo; done | background_prog