0

我正在尝试实现一些我的逻辑认为无法完成的事情。但我需要你的帮助来理解为什么不能。

问题的简短版本

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


问题详解

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

echo just checking >& logfile

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

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

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

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

在 script2 中写下这一行

./script1 >& logfile

但是,当 script1 以独立模式运行时,我无法将 script1 记录在日志文件中。

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

echo test starting >> logfile
echo test over

在这种情况下,有两个缺点: 1)“测试结束”打印在“测试开始”之前,即命令日志的出现顺序不确定。2) 如果我打算涵盖整个脚本,那么在每个语句之后放置 >>& 会很乏味。

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

4

1 回答 1

2

你提到了 csh,所以这可能对你没有帮助。另一方面,它可能会促使您停止将 csh 用于脚本,这是众所周知的不适合的任务。在 sh 中,您可以简单地执行以下操作:

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

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

于 2012-04-18T17:59:57.597 回答