2

当我们想要将标准输出重定向到文件时,以下行效果很好,并且还打印在标准输出上。

exec > >(tee logfile-1.txt)

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

exec > >(tee logfile-2.txt)

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

有没有办法让同一个 bash 脚本同时包含语句,并且输出对于与这些命令的执行顺序相对应的每个文件都是独占的?

注意:此问题是对此处提出的问题的解决方案的扩展。

4

1 回答 1

3

我会做

{
    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

请参阅http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/x13082.html了解更多exec

于 2013-02-15T08:29:31.103 回答