将stdout/stderr重定向到多个文件

kev*_*948 12 unix bash stdout stderr

我想知道如何将stderr重定向到多个输出.我用这个脚本试了一下,但我无法让它工作得很好.第一个文件应该有stdout和stderr,而第二个文件应该有错误.

perl script.pl &> errorTestnormal.out &2> errorTest.out
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?任何帮助将非常感激.谢谢.

Jar*_*rek 19

perl script.pl 2>&1 >errorTestnormal.out | tee -a errorTestnormal.out > errorTest.out

会做你想做的.

这有点乱,让我们一步一步地完成它.

  • 我们说以前STDERR会发生什么STDOUT
  • 我们说过去的内容STDOUT现在将转到errorTestnormal.out.

所以现在,STDOUT打印到文件,然后STDERR打印到STDOUT.我们想要放入STDERR2个不同的文件,我们可以用tee做.tee将它给出的文本附加到文件中,并且还回显STDOUT.

  • 我们tee用来追加errorTestnormal.out,所以它现在包含了所有STDOUTSTDERR输出script.pl.
  • 然后,我们写STDOUTtee(其中包含STDERRscript.pl)到errorTest.out

在此之后,errorTestnormal.out具有所有STDOUT输出,然后是所有STDERR输出.errotTest.out仅包含STDERR输出.

  • 没有必要使用fd 3.您可以简单地执行:perl script.pl 2>&1> errorTestnormal.out | tee ...第一次重定向将fd 2(stderr)与管道相关联,第二次重定向将stdout重定向到文件.如果你这样做:perl script.pl> errorTestnormal.out 2>&1,那么stderr和stdout都会转到该文件. (2认同)