我需要在Bash脚本(在FreeBSD6上)中执行一个命令,并且我需要将该命令的stderr和stdout发送到控制台、日志文件和Bash变量中。因此,不使用任何重定向,我想要的是:
如果我按照原样运行,只有stderr会出现在控制台上,而stdout则会同时出现在output.log文件和$result变量中。我理解其中的原因,但是多次尝试不同的重定向方式都未能将这两个流发送到所有三个位置。
如何将stderr和stdout发送到所有三个位置?
result=`./command | tee output.log`
如果我按照原样运行,只有stderr会出现在控制台上,而stdout则会同时出现在output.log文件和$result变量中。我理解其中的原因,但是多次尝试不同的重定向方式都未能将这两个流发送到所有三个位置。
如何将stderr和stdout发送到所有三个位置?
... | tee output.log /dev/tty
。它会将输入内容同时输出到指定的文件 output.log 和终端窗口 /dev/tty 中。 - n. m./dev/fd/2
代替/dev/tty
,但这将会将所有输出发送到stderr(以及日志文件和$result
),这可能也不是您想要的。 - Chris Dodd