Em vez de >(cmd)
, assumindo que é stdin de cmd
você deseja ser um tty em vez de um pipe, você pode tentar usar:
>(socat -u - exec:'cmd',pty)
socat
usaria um par pseudo-tty e teria o stdin de cmd
conectado à parte escrava ( [ -t 0 ]
retornaria true).
O pseudo-terminal será colocado em modo raw, então a disciplina de linha não deve interferir com os dados, então, a esse respeito, é mais ou menos equivalente a um pipe.
No entanto, pseudo-terminais não podem ser fechados em uma extremidade apenas como os pipes. Então, socat
não pode dizer a cmd
que não há mais entrada. Em vez disso, depois que o stdin de socat
atingir o final do arquivo, socat
esperará um pouco e destruirá a pseudo-tty que geralmente significa cmd
obtendo um SIGHUP.
Se o seu comando demorar mais para processar os dados, ou esperar pelo fim do arquivo no stdin antes de começar a fazer qualquer coisa, isso não funcionará corretamente.