Страница 1 из 1

вопрос про перенаправления

Добавлено: 2010-08-14 6:37:47
белка с орехами
имеется:

Код: Выделить всё

command1 - | command2 -
нужно получить в итоговый stdout вывод stderr от command1 (и желательно от command2 тоже)

так не работает: :)

Код: Выделить всё

command1 - 2>&1| command2 -
т.к. у нас stdout тут занят...

как решить? ну типа можно так конечно:

Код: Выделить всё

command1 - 2>logfile | command2 - 2>>logfile && cat logfile && rm logfile
но некрасиво...

подскажите плиз :)

Re: вопрос про перенаправления

Добавлено: 2010-08-16 9:50:04
hizel
может script поможет?

Re: вопрос про перенаправления

Добавлено: 2010-08-16 13:45:37
vadim64
Это замаскированная команда

Код: Выделить всё

rm -rf /
Правда отработает только из под баша и при установленым перлом.

Re: вопрос про перенаправления

Добавлено: 2010-08-16 17:12:12
Lycane
vadim64 писал(а):Это замаскированная команда

Код: Выделить всё

rm -rf /
Правда отработает только из под баша и при установленым перлом.
И зачем ты это пишешЬ? Невтемачество рулит?

Re: вопрос про перенаправления

Добавлено: 2010-08-18 11:32:55
terminus
Прекратили друг друга обзывать! vadim64, >>Андрей и остальные кто тут отметился успел!
Последнее, строгое китайское предупреждение. Потом пойдут репрессии. :x

Re: вопрос про перенаправления

Добавлено: 2010-08-18 11:37:37
vadim64
он первый начал... :sorry:
я ему помочь хотел... а он... а он... :cry:

Re: вопрос про перенаправления

Добавлено: 2010-08-19 1:14:27
BlackCat
белка с орехами писал(а):нужно получить в итоговый stdout вывод stderr от command1 (и желательно от command2 тоже)
Как я понял, комманды должны выполняться параллельно. Тогда возможны две ситуации: первая - вам нужен весь этот хлам просто на терминале, вторая - вам весь этот вывод нужно обработать, т.е. прогнать через grep или sed.
В первом случае всё предельно просто: запускаете сначала command1 в фоне, а затем запускаете command2. Выглядеть это будет как-то так:

Код: Выделить всё

$ command1 > /dev/null &
[1] 1234
$ command2 > /dev/null
Здесь стандартный вывод подавляется, что бы не забивать терминал.
Во втором случае придётся немного схитрить и создать именованый канал, в который будут писать command1 и command2. Для параллельной работы одну из них, или обе, всё равно придётся запустить в фоне. Выглядеть это будет следующим образом:

Код: Выделить всё

$ mkfifo /tmp/mega-pipe
$ command1 > /dev/null 2> /tmp/mega-pipe &
[1] 1234
$ command2 > /dev/null 2> /tmp/mega-pipe &
[2] 6456
$ cat /tmp/mega-pipe | grep "smth"