【问题标题】:Getting stdout+stderr in a log file在日志文件中获取 stdout+stderr
【发布时间】:2012-04-18 17:42:47
【问题描述】:

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

问题的简短版本

是否可以在不使用文件重定向( >& 或 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)“test over”在“test started”之前打印,即命令日志的出现顺序不确定。 2) 如果我打算涵盖整个脚本,那么在每个语句之后加上 >>& 会很乏味。

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

【问题讨论】:

  • 我不明白。您说“我不允许使用文件重定向”,然后您说“另一种选择是在 script1 中使用文件重定向”。另一个选项似乎与您不允许使用的示例完全相同。
  • 很抱歉不清楚。通过“另一个选项..”,我解释了为什么我不能使用正常的文件重定向,因为它没有给出所需的输出。如果您需要更多输入,请提示我。

标签: shell redirect stdout stderr csh


【解决方案1】:

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

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

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

【讨论】:

  • 不幸的是我不能使用除了 csh/tcsh 之外的任何东西。我很欣赏你的回答威廉。那么,您的意思是 exec 语句不适用于 csh?
猜你喜欢
  • 2013-11-16
  • 2022-12-07
  • 1970-01-01
  • 2019-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
相关资源
最近更新 更多