我正在尝试实现我的逻辑所说无法完成的事情。但我需要你的帮助才能理解为什么不能这样做。
问题的简短版
是否可以在不使用文件重定向(>&或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。
答案 0 :(得分:2)
你提到csh,所以这可能对你没有帮助。另一方面,它可能会激励你停止使用csh脚本,这是一个众所周知的不合适的任务。在sh中,你可以简单地做:
#!/bin/sh
exec > logfile 2>&1
echo foo
将foo(以及所有后续命令的输出和错误)写入日志文件