【问题标题】:Redirecting stdout/stderr to multiple files将 stdout/stderr 重定向到多个文件
【发布时间】:2011-12-28 18:45:30
【问题描述】:

我想知道如何将 stderr 重定向到多个输出。我用这个脚本试过了,但我不能让它完全正常工作。第一个文件应该有标准输出和标准错误,第二个应该只有错误。

perl script.pl &> errorTestnormal.out &2> errorTest.out

有没有更好的方法来做到这一点?任何帮助将非常感激。谢谢。

【问题讨论】:

  • 将鼠标悬停在您添加的标签上,stdout/stderr 的关注者 = 总共 7 个。如果你为你正在使用的 shell 添加一个标签,你会更多地关注你的问题,bash,我猜?祝你好运。

标签: bash unix stdout stderr


【解决方案1】:

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,因此它现在包含script.pl 的所有STDOUTSTDERR 输出。
  • 然后,我们将teeSTDOUT(包含来自script.plSTDERR)写入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】:

我也不得不解决这个问题一段时间。为了在两个文件中获取 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。

【讨论】:

    【解决方案3】:

    我猜在第二个“>”的情况下,您尝试将errorTestnormal.out(而不是script.pl)的错误输出发送到errorTest.out

    【讨论】:

      猜你喜欢
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 2016-02-19
      相关资源
      最近更新 更多