Как передать стандартный поток ошибок, не передавая стандартный поток вывода?
Я знаю, что эта команда работает, но она также записывает стандарт.
Command 2>&1 | tee -a $LOG
Как получить только стандартную ошибку?
Примечание. Из этого я хочу просто записать поток stderr в журнал и записать как stderr, так и stdout в консоль.
tee.exe
установленным :)Unix / Linux команда Кайла переключает STDERR с STDOUT; однако объяснение не совсем верно. Операторы перенаправления не выполняют никакого копирования или дублирования, они просто перенаправляют поток в другое направление.
Переписав команду Кайла, временно переместив 3> & 1 в конец, упростит понимание концепции:
Тем не менее, в таком случае Linux будет отображать ошибку, поскольку & 3 еще не существует, так как он расположен до 3> & 1. 3> что-то - это способ объявить (определить), что мы собираемся использовать третью трубу, так что она должна быть расположена до того, как мы потечем воду в эту трубу, например, так, как это написал Кайл. Попробуйте этот другой способ просто для удовольствия:
Не иметь возможности делать копии - это позор. Вы не можете делать такие вещи, как «3> & 1 3> & 2» в одной команде, потому что Linux будет использовать только первый найденный и отклонит второй.
Я (пока) не нашел способа отправить как ошибку, так и обычный вывод в файл, а также отправить копию ошибки на стандартный вывод одной командой. Для instace у меня есть задание cron, в котором я хочу, чтобы оба вывода (error и standard) заносились в файл журнала и позволяли также сообщать об ошибке, чтобы отправить сообщение электронной почты на мой blackBerry. Я могу сделать это с помощью двух команд, используя «tee», но ошибка не отображается в правильном порядке среди обычной строки вывода в файле. Это уродливый способ, которым я решил проблему:
Обратите внимание, что я должен использовать log1 дважды, и я должен добавить в обоих случаях, первый из которых использует опцию "-a" для команды "tee", а второй - ">>".
Делая кошку log1 вы получаете следующее:
Обратите внимание, что ошибка не отображается во второй строке, как следует.
источник
mult_ios
параметр ( включен по умолчанию), чтобы иметь возможность перенаправлять FD несколько раз.согласно man-странице для ksh (pdksh), вы можете просто сделать:
Команда 2> & 1> / dev / null | кот-н
то есть dup stderr в stdout, перенаправьте stdout в / dev / null, затем перенаправьте в 'cat -n'
работает на pdksh в моей системе:
источник
Я запустил его так, как ты когда-либо хотел, так как я тоже нуждался в этом и усовершенствовал твою команду. Теперь для меня это работает правильно, используя Bash 3.2 на Debian Squeeze с помощью этого
в то время как log1 регистрирует stdout и stderr, а log2 регистрирует только stderr и ничего больше не выводит на экран.
источник