Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:
#!/usr/local/bin/perl -w # perl script to pipe up to 3 commands together $cmd=<STDIN>; #get input chomp($cmd); #remove carriage return @cmd=split(#,$cmd); #seperate commands by a # $max=3; #set max size of array to 3 $max=@cmd; #assign size to array cmd $max=$max-1; #let the array start at 0 for($x=1;$x<$max-1;$x++){ #go through each element of the array if(fork==0) { #do the first command for($n=1;$n<$max-1;$n++) #close all input pipes close INPIPE[$n]; for($p=2;$p<$max-1$p++) #close all the output pipes close OUTPIPE[$p]; #except the last one close STDOUT; open STDOUT">&OUTPIPE[1]"; #first output pipe still open exec cmd[1];#execute the first command } elseif (x=max-1) #second command { for($n=1;$n<max-1;$n++) #close all input pipes if n!=x-1 close INPIPE[$n]; if n!=x-1 close OUTPIPE[$n]; #close outpipe close STDIN; #close STDIN open STDIN">&INPIPE[n-1]; close STDOUT; #close STDOUT open STDOUT">&OUTPIPE[n]; exec cmd[2]; } elseif(x=max) #last command for($n=1;$n<max-2;$n++) #close all input pipes Close INPIPE[$n]; for($p=1;$p<$max-1;$p++) #close all output pipes close INPIPE[$p]; #close INPIPE close STDIN; open STDIN">&INPIPE[max]; exec cmd[3]; #execute the last command } } for($d=1; $d<$max-1; $d++) { close INPIPE[$d]; #close INPIPES close OUTPIPE[$d]; #close outpipes } for($s=1;$s<$max-1;$s++) { wait; # wait for the child process } {
Edit Masem - 2001-07-24 - Added CODE tags (sic)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: my pipes
by wine (Scribe) on Jul 23, 2001 at 14:00 UTC | |
|
Re: my pipes
by bwana147 (Pilgrim) on Jul 23, 2001 at 13:47 UTC | |
|
Re: my pipes
by mattr (Curate) on Jul 23, 2001 at 13:41 UTC |