在日志文件中获取stdout + stderr

时间:2012-04-18 17:42:48

标签: shell redirect stdout stderr csh

我正在尝试实现我的逻辑所说无法完成的事情。但我需要你的帮助才能理解为什么不能这样做。

问题的简短版

是否可以在不使用文件重定向(>&或tee)的情况下在csh中记录脚本的stdout + stderr。


问题的详细说明

我有一个csh脚本(script1)的要求,我不允许使用文件重定向。(我会在一段时间内给出原因) 所以这意味着我不能使用像

这样的东西
echo just checking >& logfile

因此我不能使用它或tee来创建我的日志文件。 我还有一个另一个脚本(script2),它是一个顶级脚本。

我可以在独立模式下运行script1,也可以通过script2运行。

在任何一种情况下,我都需要在logfile中创建script1的日志(stdout + stderr)。

有两种可能(但不完整)的选项

在script2中写下这一行

./script1 >& logfile

但是当script1以独立模式运行时,我无法在logfile中记录script1。

另一种选择是在script1中使用文件重定向,如下所示:

echo test starting >> logfile
echo test over

在这种情况下,你有两个缺点: 1)在“测试开始”之前“测试”打印,即命令日志的发生顺序不确定。 2)把>>&amp ;;放在一起很麻烦如果我打算覆盖整个剧本,请在每个陈述之后。

现在还有其他办法,我可以得到我需要的东西。那就是我可以在没有文件重定向的情况下运行script1,并且仍然可以在logfile中记录它的stdout + stderr。

1 个答案:

答案 0 :(得分:2)

你提到csh,所以这可能对你没有帮助。另一方面,它可能会激励你停止使用csh脚本,这是一个众所周知的不合适的任务。在sh中,你可以简单地做:

#!/bin/sh
exec > logfile 2>&1
echo foo

将foo(以及所有后续命令的输出和错误)写入日志文件