2011-10-21 9 views
0

Solaris上でteeコマンドを使用して、複数のステートメントからなる2つの異なるスティームに1つのコマンドの出力をルーティングしようとしています。ここで私がコード化したもののスニペットはありますが、うまくいきません。この繰り返しは、予期しないファイルの終了についてのエラーをスローします。 >を|に変更すると、予期しないトークンの近くで構文エラーが発生します。teeから2ブロックのコード?

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 
) 

提案ですか?

答えて

1

"while"は、の中にの各>(...)の中で始まり(外ではなく)始める必要があります。したがって、私はあなたが望むものが信じています:

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 
) 
+0

素晴らしい、ありがとう。 – JimR

0

私はteeコマンドがそうするとは思わない。 teeコマンドは、1つ以上のファイルにstdinを書き込むだけでなく、stdoutに書き戻します。さらに、シェルがあなたのようにコマンドパイプラインの2つのサブプロセスをフォークできるかどうかはわかりません。おそらく、Perlのようなものを使用していくつかのサブプロセスをフォークし、それぞれに標準入力を書く方が良いでしょう。

関連する問題