从同一个bash脚本中多次将stdout的COPY重定向到不同的日志文件

时间:2013-02-15 08:08:21

标签: bash shell redirect exec tee

当我们想要将stdout重定向到文件时,以下行可以正常工作,并且还可以在stdout上打印。

exec > >(tee logfile-1.txt)

但是,如果我们希望稍后将stdout重定向到另一个文件,比如说,

exec > >(tee logfile-2.txt)

面临的问题是输出仍然会被重定向到第一个文件(logfile-1.txt)以及第二个文件(logfile-2.txt)。

是否有一种方法可以使同一个bash脚本同时包含该语句,并且输出对应于执行这些命令的每个文件是独占的?

注意: 对于提出的问题solution,此问题已扩展至here

1 个答案:

答案 0 :(得分:2)

我会做

{
    command1
    command2
} | tee logfile-1.txt

{
    command3
    command4
} | tee logfile-2.txt

或者,首先备份原始文件描述符:

exec 6<&1
exec > >(tee log1)
echo 1
echo 2
exec 1<&6 6<&-
exec > >(tee log2)
echo 3
echo 4

有关exec

的更多高级用法,请参阅http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/x13082.html