> On Mon, Oct 12, 2009 at 1:14 PM, Ralf Goertz >> is it possible to have a process substitution with both input and output >> redirection? So far I use the following work-around >> >>> cat parentprocess.sh: >> #!/bin/bash >> mkfifo fifo 2>/dev/null >> exec 5> >(./subprocess.sh > fifo) >> exec 6< <(cat < fifo)
I think "exec 6<fifo" is enough here? >> Is there another way to do that, something like fork, which wouldn't use >> a named pipe explicitely? "socat" provides a terse solution where you still have to name the pipes, but their clean-up comes for free. Moreover it works with any shell. socat is very flexible, below is only one of the ways to do it. #!/bin/sh socat EXEC:./subprocess.sh PIPE:tosub.$$,nonblock!!PIPE:fromsub.$$ & # The alternative to polling is creating the pipes in # advance. But this would require a "finally" clause to clean them. until test -p fromsub.$$; do sleep 1; done exec 6<fromsub.$$ exec 5>tosub.$$ echo input to subprocess 1>&5 echo done sending input # [etc.]