T恤到2块代码?

时间:2011-10-21 17:52:44

标签: solaris pipe tee

我正在尝试在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
)

建议?

2 个答案:

答案 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写入每个子进程。