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

发布于 2024-12-15 04:39:06 字数 214 浏览 0 评论 0原文

我想知道如何将 stderr 重定向到多个输出。我用这个脚本尝试过,但无法让它正常工作。第一个文件应该有 stdout 和 stderr,第二个文件应该只有错误。

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

有更好的方法吗?任何帮助将不胜感激。谢谢。

I was wondering how to redirect stderr to multiple outputs. I tried it with this script, but I couldn't get it to work quite right. The first file should have both stdout and stderr, and the 2nd should just have errors.

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

Is there a better way to do this? Any help would be much appreciated. Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

逆蝶 2024-12-22 04:39:06

下面的命令将执行您想要的操作。

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,因此它现在包含 STDOUTSTDERR 输出代码> script.pl 。
  • 然后,我们将 teeSTDOUT(包含 script.pl 中的 STDERR)写入 errorTest。 out

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

The command below will do what you want.

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

This is a bit messy, so lets go through it step by step.

  • We say what used to go to STDERR will now go STDOUT.
  • We say what used to go to STDOUT will now go to errorTestnormal.out.

So now, STDOUT gets printed to a file, and STDERR gets printed to STDOUT. We want put STDERR into 2 different files, which we can do with tee. tee appends the text it's given to a file, and also echoes to STDOUT.

  • We use tee to append to errorTestnormal.out, so it now contains all the STDOUT and STDERR output of script.pl.
  • Then, we write STDOUT of tee (which contains STDERR from script.pl) into errorTest.out

After this, errorTestnormal.out has all the STDOUT output, and then all the STDERR output. errotTest.out contains only the STDERR output.

注定孤独终老 2024-12-22 04:39:06

我也不得不为此折腾了一段时间。为了在两个文件中获取 stderr,同时仅将 stdout 放入单个文件中(例如,将 stderr 放入 error.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 。

I had to mess around with this for a while as well. In order to get stderr in both files, while only putting stdout into a single file (e.g. stderr into errors.log and output.log and then stdout into just output.log) AND in the order that they happen, this command is better:

((sh test.sh 2>&1 1>&3 | tee errors.log) 3>&1 | tee output.log) > /dev/null 2>&1

The last /dev/nul 2>&1 can be omitted if you want the stdout and stderr to still be output onto the screen.

焚却相思 2024-12-22 04:39:06

我想如果是第二个“>”您尝试将 errorTestnormal.out 的错误输出(而不是 script.pl)发送到 errorTest.out

I guess in case of the 2nd ">" you try to send the error output of errorTestnormal.out (and not that of script.pl) to errorTest.out.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文