如何将 stderr 和 stdout 重定向到不同的文件并在终端中显示?

bal*_*lki 41 bash logs io-redirection

我想在终端中查看命令的输出,就好像没有重定向一样。此外,stderr 需要重定向到 err.log,stdout 需要重定向到 stdout.log。

如果在一个单独的文件 stdouterr.log 中也有终端中显示的内容的精确副本,即在它发生时打印错误,那就太好了。

dog*_*ane 49

使用tee命令如下:

(cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log
Run Code Online (Sandbox Code Playgroud)

3>&1 1>&2 2>&3 是如何交换 stderr 和 stdout,因为 tee 只能接受 stdout。

查看Unix tee 命令,了解使用tee.

  • @turbanoff 将 `cmd` 替换为 `(cmd ; echo >exit_code.txt $?)`。 (2认同)

小智 5

我认为将 stdout 和 stderr 记录到两个不同的文件是一个绝妙的主意。它不会使日志异步吗?所以我尝试了以下方法:

  • stdout 到“stdout.log”(正如 dogbane 建议的那样)
  • stderror 到“stderr.log”(正如 dogbane 建议的那样)
  • 所有输出到“all.log”和
  • 仍然能够在显示器上看到输出(尽管在单独的终端中!)

((cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log) &> all.log

在另一个终端

tail -f --sleep-interval=2 all.log
Run Code Online (Sandbox Code Playgroud)