методы перенаправления stderr - PullRequest
       11

методы перенаправления stderr

0 голосов
/ 24 февраля 2012

На моей машине запущена оболочка tcsh / csh.В последнее время я понял, что мое перенаправление файлов stderr не работает.

Пожалуйста, найдите журналы терминала, как показано ниже:

>echo b c >>& log
>cat log
b c
>echo $a b c >>& log
a: Undefined variable.
>cat log
b c

Я никогда не сталкивался с такими проблемами, поэтому не уверен, как отлаживать или устранять неполадки,Пожалуйста посоветуй!

Альтернативный метод перенаправления использует тройник.Пока я использую> & или >> &, я вообще блокирую любой вывод, который будет отображаться на терминале.Есть ли способ, которым я могу сделать оба, то есть: для каждого оператора

а) прямой вывод stdout + stderr в файл.

b) отображение stdout + stderr на терминале

Мне нужно подтвердить, могу ли я использовать что-то подобное (ниже) для удовлетворения своих требований

>csh ./script_name | tee -a log

В моем случае это только направляет stdout в файл журнала и блокирует stderr.

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Я вполне уверен, что оценка $a выполняется текущей оболочкой, до перенаправление настроено для echo подоболочки?

Кажетсяподтверждается тем фактом, что echo на самом деле вообще не записывает в файл , , что можно увидеть, если вы удалили файл log перед второй попыткой:

[pax ~]$ echo b c >>& log

[pax ~]$ cat log
b c

[pax ~]$ rm log

[pax ~]$ echo $a b c >> & log
a: Undefined variable.

[pax ~]$ cat log
cat: log: No such file or directory

А также тот факт, что, если вы запустите echo в явном подоболочке с перенаправлением, выполненным для подоболочки, а не echo, вы получите желаемый результат:

[pax ~]$ ( echo $a b c ) >> & log

[pax ~]$ cat log
b c
a: Undefined variable.

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

[pax ~]$ rm log

[pax ~]$ $xyzzy
xyzzy: Undefined variable.

[pax ~]$ $xyzzy >>&log
xyzzy: Undefined variable.

[pax ~]$ cat log
cat: log: No such file or directory

Причина этого в том, что текущая оболочка жалуется на попытку оценить $xyzzy.Это имеет смысл.С помощью команды:

someCmd $HOME

исполняемый файл someCmd будет никогда видеть литерал $HOME, он фактически заменяется значением.И эта замена выполняется оболочкой до того, как someCmd будет даже настроен (включая изменение его стандартных входных или выходных потоков).

0 голосов
/ 24 февраля 2012

Вы не можете выполнять манипуляции с дескриптором файла, и мантра о том, что Csh Programming считается вредной , повторяется в течение последних 20 лет.

Существует множество альтернативных оболочек, и даже / bin / sh является лучшим вариантом для программирования сценариев, чем tcsh / csh. Я надеюсь, что после всего этого времени никто не заставляет вас использовать csh.

...