如何将 OUT 和 ERR 都重定向到一个文件,而仅将 ERR 重定向到另一个文件

问题描述

您好专家
我想输出命令并将错误附加到一个文件中,就像这样command > logoutErr.txt 2>&1
但我也希望 err 也附加到另一个 command 2> logErrOnly.txt

# This is a non working redirection
exec 1>> logoutErr.txt 2>> logoutErr.txt 2>> logErrOnly.txt

# This should be in Out log only
echo ten/two: $((10/2))

# This should be in both Out and Out+Err log files
echo ten/zero: $((10/0))

我明白最后一个重定向 2>> 覆盖了前面的 ...那又怎样?球座?但如何?

我必须在脚本的开头做一次,不能修改脚本的其余部分(因为它是动态生成的,任何修改都太复杂了)

请不要只回答理论的链接,我已经花了两天时间阅读所有内容但没有好的结果,我想要一个有效的例子
谢谢

解决方法

了解这样做时您将失去订购保证:

#!/usr/bin/env bash
exec >>logOutErr.txt 2> >(tee -a logErrOnly.txt)

# This should be in OutErr
echo "ten/two: $((10/2))"

# This should be in Err and OutErr
echo "ten/zero: $((10/0))"

这是有效的,因为重定向是从左到右处理的:当 tee 开始时,它的标准输出已经指向 logOutErr.txt,所以它在第一次写入 {{1} 后附加到那个位置}.