如何使用bash将输出重定向到多个文件,而不用分叉?

时间:2013-11-27 19:46:15

标签: bash shell

我通过bash包装器脚本运行my_program,并使用exec来阻止分支进程:

  #! /bin/bash
  exec my_program >> /tmp/out.log 2>&1

现在我想将所有输出复制到两个不同的文件中,但仍然阻止分叉,所以我想要使用管道和tee这样:< / p>

  #! /bin/bash
  exec my_program 2>&1 | tee -a /tmp/out.log >> /tmp/out2.log

如何使用bash做到这一点?

避免分叉的原因是确保:

  1. 发送到bash脚本的所有信号也会到达my_program(包括不可捕获的信号)。
  2. bash-script上的waitpid(3)在my_program也终止之前永远不会返回。

1 个答案:

答案 0 :(得分:0)

我认为您可以做的最好的事情是通过流程替换将标准输出和错误重定向到tee

exec > >( tee -a /tmp/out.log >> /tmp/out2.log) 2>&1

然后execbash脚本替换为您的程序(它将保持与标准输出相同的打开文件句柄)。

exec my_program