将stdout和stderr的副本重定向到一个文件,将stderr的副本从bash脚本中复制到另一个文件

时间:2015-12-23 04:37:43

标签: bash shell io-redirection

请注意,我已经查看了下面的两个stackoverflow问题,但我的问题有所不同:

在尝试执行此操作时,我有以下test.sh脚本:

#!/bin/bash

rm stdout_and_stderr.log
rm stderr.log

exec 2> >(tee -ia stderr.log >> stdout_and_stderr.log) 1> >(tee -ia stdout_and_stderr.log)

echo "stdout"
echo "stderr" >&2

唯一的问题是stderr没有显示到终端:

$ ./test.sh > /dev/null
$ ./test.sh 2> /dev/null
$ stdout

我的bash版本:

GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)

1 个答案:

答案 0 :(得分:0)

这是一个有效的解决方案:

#!/bin/bash

rm stdout_and_stderr.log
rm stderr.log

exec 2> >(tee -ia stdout_and_stderr.log >&2)
exec 2> >(tee -ia stderr.log >&2)
exec 1> >(tee -ia stdout_and_stderr.log)

echo "stdout"
echo "stderr" >&2

也可以在一行中完成:

exec 1> >(tee -ia stdout_and_stderr.log) 2> >(tee -ia stdout_and_stderr.log >&2) 2> >(tee -ia stderr.log >&2)