#!/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)
In reply to my pipes by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |