我正在尝试在Solaris上使用tee命令将1个命令的输出路由到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
)
建议?
答案 0 :(得分: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
)
答案 1 :(得分:0)
我认为tee
命令不会这样做。 tee
命令会将stdin写入一个或多个文件,并将其吐回stdout。另外,我不确定shell是否可以像您尝试的那样在命令管道中分叉两个子进程。你可能最好使用像Perl这样的东西来分解几个子进程并将stdin写入每个子进程。