我想知道如何将stderr重定向到多个输出。我用这个脚本试了一下,但我无法让它工作得很好。第一个文件应该有stdout和stderr,第二个应该有错误。
perl script.pl &> errorTestnormal.out &2> errorTest.out
有更好的方法吗?任何帮助将非常感激。谢谢。
答案 0 :(得分:19)
perl script.pl 2>&1 >errorTestnormal.out | tee -a errorTestnormal.out > errorTest.out
会做你想做的事。
这有点乱,让我们一步一步地完成它。
STDERR
的内容现在会STDOUT
STDOUT
的内容现在会转到errorTestnormal.out。 现在,STDOUT
被打印到文件中,STDERR
被打印到STDOUT
。我们希望将STDERR
放入2个不同的文件中,我们可以使用tee。 tee将给出的文本附加到文件中,并回显到STDOUT
。
tee
附加到errorTestnormal.out
,因此它现在包含STDOUT
的所有STDERR
和script.pl
输出。STDOUT
tee
的{{1}}(STDERR
中包含script.pl
)写入errorTest.out
在此之后,errorTestnormal.out
包含所有STDOUT
输出,然后输出所有STDERR
。 errotTest.out
仅包含STDERR
输出。
答案 1 :(得分:2)
我也不得不捣乱这一段时间。为了在两个文件中获取stderr,同时只将stdout放入单个文件(例如stderr到errors.log和output.log然后stdout到output.log)并按照它们发生的顺序,这个命令更好:
((sh test.sh 2>&1 1>&3 | tee errors.log) 3>&1 | tee output.log) > /dev/null 2>&1
如果你想让stdout和stderr仍然输出到屏幕上,可以省略最后的/ dev / nul 2>& 1。
答案 2 :(得分:0)
我想在第二个“>”的情况下您尝试将errorTestnormal.out
的错误输出(而不是script.pl
的错误输出)发送到errorTest.out
。