Search code examples
solarispipetee

tee to 2 blocks of code?


I am trying to use the tee command on Solaris to route output of 1 command to 2 different steams each of which comprises multiple statements. Here is the snippet of what I coded, but does not work. This iteration throws errors about unexpected end of files. If I change the > to | it throws an error Syntax Error near unexpected token do.

todaydir=/some/path
baselen=${#todaydir}

grep sometext $todaydir/somefiles*

while read iline
tee
>(
# this is the first block
do ojob=${iline:$baselen+1:8}
   echo 'some text here' $ojob
done  > firstoutfile
)
>(
# this is the 2nd block
do ojob=${iline:$baselen+1:8}
   echo 'ls -l '$todaydir'/'$ojob'*'
done  > secondoutfile
)

Suggestions?


Solution

  • The "while" should begin (and end) inside each >( ... ) substitution, not outside. Thus, I believe what you want is:

    todaydir=/some/path
    baselen=${#todaydir}
    
    grep sometext $todaydir/somefiles* | tee >(
       # this is the first block
       while read iline
       do ojob=${iline:$baselen+1:8}
          echo 'some text here' $ojob
       done  > firstoutfile
      ) >(
       # this is the 2nd block
       while read iline
       do ojob=${iline:$baselen+1:8}
          echo 'ls -l '$todaydir'/'$ojob'*'
       done  > secondoutfile
      )