2013-11-21 3 views
0

У меня есть oneliner, который неизбежно генерирует некоторые ошибки, которые я хочу игнорировать, поэтому я пытаюсь перенаправить его в файл, но он продолжает отображаться на экране. Вот как это выглядит:Не удается перенаправить stderr в файл

command1 | command2 | command3 1> stdout.txt 2> stderr.txt 

Я также попытался посылая их обоих в тот же файл (с &>), но STDERR просто не хочет, и это очень расстраивает.

+1

Влияют ли ваши команды на ошибки stderr? – jdigital

+0

Я не знал, что мне нужно было добавить перенаправление после каждой команды. Я их все собрал по трубам. Он работает сейчас. Если бы вы могли опубликовать это как ответ, чтобы я мог дать вам «реальный» кредит, это было бы здорово. Благодаря ! –

ответ

1

Вы должны перенаправить поток ошибок на каждом этапе вашего трубопровода. Вы можете сделать это следующим образом:

command1 2>&1 | command 2 

или (по крайней мере, с Баш):

command1 |& command2 

(смотрите раздел трубопроводов bash man page).

2

stderr дескриптор файла не проходит через трубу, только stdout. Вы можете попробовать что

commandThatDoesNotExist | less 

Вы ничего не увидите в less, но ошибка будет записана на терминале. Для трубы дескриптор stderr файла, перенаправить его туда, где stdout точки

commandThatDoesNotExist 2>&1 | less 

Теперь вы видите ошибку в less.

Для того, чтобы не иметь не stderr на терминале, вы должны перенаправить дескриптор файла каждой команды в файл stderr:

command 1 2>stderr.txt | command 2 2>stderr.txt | command 3 2>stderr.txt 1>stdout.txt 
Смежные вопросы