如何将 STDERR 重定向到文件和控制台,并将 STDOUT 重定向到文件

Enz*_*Chi 5 bash bash-scripting

我想要实现的是将正常消息和错误消息重定向到一个文件。还要将错误信息打印到控制台(只有错误信息)。

NZD*_*NZD 5

解决方案之一(众多)如下:

command 2>&1 1>logfile | tee -a logfile
Run Code Online (Sandbox Code Playgroud)

钥匙:

`2>&1` redirect the output of STDERR to STDOUT
`1>logfile` redirect STDOUT (note: leaves STDERR unchanged)
`| tee -a logfile` append the redirected STDERR to the logfile
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅Bash 黑客 Wiki

  • @EnzoChi 重定向 `2>&1` 告诉 bash 将 STDERR 重定向到与 STDOUT `currently` 所在的位置相同的 fd(文件描述符)。它没有将其重定向到 STDOUT。如果您随后重定向 STDOUT (`1>logfile`),STDERR 将不会受到影响,它仍然会指向相同的 fd。进行重定向的顺序很重要。 (3认同)