我有一个我想要解决的具体问题,我正在system
通过perl
运行,我认为这是bash
:
stdout
中显示stderr
和both.log
。如果完成,添加“完成”。 stderr
stderr.log
因此,一旦我们合并stdout
和stderr
,我们可以再次将它们分开吗?或者,我们可以首先捕获stderr
然后将其与stdout
结合起来吗?
答案 0 :(得分:0)
tcsh
就不够了。它不支持在没有标准输出的情况下重定向stderr。
使用另一个shell或指定的脚本。
更多here。
<强>更新强>
这可以移植到tcsh吗?
没有。 tcsh不支持在没有标准输出的情况下重定向stderr。
答案 1 :(得分:0)
bash:system("((" . $cmd . " 2>&1 1>&3 | tee -a stderr.log) 3>&1) > both.log; echo done | tee -a both.log"
即使我们对tee
使用stderr.log
,它也不会tee
错误输出到终端(这就是我想要的)。我不完全理解它是如何工作的,但我想tee
会导致它转到日志文件,也会转到下一个文件描述符等式。
<强>加成强>
我在评论中发现了这一点:http://wiki.bash-hackers.org/howto/redirection_tutorial
这可以用来做同样的事情,但所有输出也是tee
到终端(它不打印“完成”)。
bash下
(($command 2>&1 1>&3 | tee stderr.log) 3>&1 ) | tee both.log
使用Perl 5.14.1。