bash除了stdout之外还将输出重定向到日志文件

时间:2013-02-21 17:37:55

标签: bash logging

我正在尝试将脚本所做的更改记录到日志文件中。在非常高的级别,我的脚本具有功能,我希望能够将该信息记录到文件中。我用了" tee -a"但这在很多方面搞砸了这个功能。

有没有简单的方法来完成这项任务?

更新:修正了

以下的拼写错误
function1(){ ... }
function2(){ ... }
#main
function1 | tee -a /tmp/logfile
function2 | tee -a /tmp/logfile

1 个答案:

答案 0 :(得分:1)

(编辑以反映问题编辑) 您可以将tee合并到函数定义中:

function() { { ...<original function definition goes here>; } | tee -a output; }

因此,每次调用此功能时都不需要调用tee。显然,如果函数修改文件描述符,您将需要做更多的工作。另外,请记住,这会改变缓冲。如果从function1中调用的命令对于它们的stdout有一个tty,它们可能会对它们的输出进行行缓冲,但是如果它们的stdout是一个管道(如果你正在管道到tee那就是它),则输出将被块缓冲。这可能是您所看到的差异的根本原因。此外,这仅捕获一个文件描述符的输出。也许你有命令写入stderr。您需要提供有关管道发球管改变脚本行为的方式的更多详细信息。