#!/usr/local/bin/perl -w # perl script to pipe up to 3 commands together $cmd=; #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&INPIPE[n-1]; close STDOUT; #close STDOUT open STDOUT">&OUTPIPE[n]; exec cmd[2]; } elseif(x=max) #last command for($n=1;$n&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 } {