如何同步记录stderr和stdout,但只将stderr打印到屏幕?

Dam*_*ien 2 bash shell stdout stderr

这是我经常尝试做的任务.我想将stderr和stdout都记录到日志文件中.但我只想打印到控制台stderr.

我试过tee,但是一旦我使用"2>&1"合并了stderr和stdout.我不能再将stdout打印到屏幕上,因为我的管道都已合并.

这是我尝试过的一个简单例子

./dosomething.sh | tee -a log 2>&1.现在我有stderr和stdout到日志和屏幕.

有任何想法吗?

基于对本网站的一些阅读,已经提出了这个问题. 将STDOUT和STDERR写入日志文件,也将STDERR写入屏幕

还有一个非常相似的问题: 同步保存stdout,stderr和stdout + stderr

但是当stdoud和stderr同步写入日志文件时,它们都不能将stdout + stderr重定向到日志和stderr到屏幕.

Ran*_*832 5

我能够在bash中使用它:

(./tmp.sh 2> >(tee >(cat >&2) >&1)) > tmp.log
Run Code Online (Sandbox Code Playgroud)

这在zsh中无法正常工作(提示不会等待进程退出),并且在dash中根本不起作用.一个更便携的解决方案可能是编写一个简单的C程序来完成它.