在 shell 脚本中,如何将 stdout 重定向到控制台,并将 stdout 和 stderr 重定向到文件?

Ala*_*mas 6 bash stdout sh stderr tee

我需要将 stdout 重定向到控制台,并将 stdout 和 stderr 重定向到文件。这需要在 shell 脚本内完成。我发现下面的代码可以重定向到控制台和日志文件,现在我需要将 stderr 删除到控制台。

exec > >(tee -i "output.log") 2>&1
Run Code Online (Sandbox Code Playgroud)

你能帮我一下吗?

小智 2

源自这个答案: How do I get STDOUT 和 STDERR to go to theterminal and a log file?

我测试了以下代码:

echo '' > out.log
exec 1> >(tee -a -i out.log) 2> >(tee -a -i out.log > /dev/null)
>&2 echo yay
echo nay
Run Code Online (Sandbox Code Playgroud)

STDERR 内容进入文件而不是控制台,而 STDOUT 则进入两者。

  • `exec 2>output.log >>(tee /dev/tty >&2)` 不会做同样的事情吗? (4认同)