2016-11-02 18 views
0

Как перенаправить STDEER в файл и оба STDOUT & STDERR все еще отображается на экране?tee stderr to file (csh/tcsh shell)

Я нашел много методов в Интернете, но они не работают на оболочке csh/tcsh. Однако моя команда не может работать в «bash shell».

Я знаю кое-что, как показано ниже:

(команда>/DEV/Null)> & stderr.log

Но это будет маскировать отображение экрана.

+0

Но я хочу только перенаправить STDERR в файл, а не как STDOUT, так и STDERR. – user3867146

+0

Приношу свои извинения, я неправильно понял. – Carpetsmoker

ответ

0

Параметры перенаправления IO tcsh перенаправляют stdout и stderr одновременно или только stdout.

Один из вариантов - перенаправить stdout на /dev/tty, а затем дублировать stderr в stdout и tee.

% (command > /dev/tty) |& tee stderr.log 

Обратите внимание, что это всегда будет записываться на консоль, даже если оно используется в скрипте, который вы затем выполняете в другом месте.

Вы можете вызвать другие оболочки изнутри tcsh, поэтому стоит упомянуть, что они могут сделать.

Совместимые с Bourne оболочки могут обрабатывать только stdout, но имеют синтаксис для управления файловыми дескрипторами, используя третий файловый дескриптор в качестве временного хранилища, мы можем обменивать stdout и stderr. Последовательность 3>&2 2>&1 1>&3 3>&- выполняет это и затем закрывает дескриптор файла 3.

$ (command 3>&2 2>&1 1>&3 3>&- | tee stderr.log) 3>&2 2>&1 1>&3 3>&- 

Bash и некоторые другие оболочки, как процесс замещения поддержки ЗШ, которая позволяет использовать команду в качестве источника <(...) или назначения >(...).

$ command 2> >(tee stderr.log) 

Если вы не против тирады, http://www.grymoire.com/unix/CshTop10.txthttp://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot и имеют приличную информацию о некоторых из грубых краев (т) CSH котирования, переназначение, условные и псевдонимов. Однако некоторые данные об определенных ошибках устарели.

 Смежные вопросы

  • Нет связанных вопросов^_^