тоесть 2 блока кода? - PullRequest
       29

тоесть 2 блока кода?

0 голосов
/ 21 октября 2011

Я пытаюсь использовать команду tee в Solaris для маршрутизации вывода 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 ]

1 голос
/ 21 октября 2011

"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 голосов
/ 21 октября 2011

Я не думаю, что команда tee сделает это.Команда tee запишет стандартный ввод в один или несколько файлов, а затем выплюнет его обратно в стандартный вывод.Кроме того, я не уверен, что оболочка может отключить два подпроцесса в командном конвейере, как вы пытаетесь.Возможно, вам было бы лучше использовать что-то вроде Perl, чтобы отключить пару подпроцессов и написать stdin для каждого.

...