我有一个特定的问题,我想解决,并且我正在通过perl
运行system
,我认为它在bash
中运行:
- 在
both.log
中显示stdout
和stderr
。添加"完成"(如果完成)。 -
附录
stderr
instderr.log
- 请勿打印到终端,除了原始命令,如果命令完成了。
因此,一旦我们组合了stdout
和stderr
,我们可以再次将它们分开吗?或我们可以首先捕获stderr
,然后将其与stdout
结合?
bash: system("((" . $cmd . " 2>&1 1>&3 | tee -a stderr.log) 3>&1) > both.log; echo done | tee -a both.log"
即使我们对stderr.log
使用tee
,它也不会tee
错误输出到终端(这是我想要的)。我不完全了解它的工作原理,但是我猜tee
会导致它转到日志文件,也可以转到下一个文件描述符方程。
奖金
我在这里的评论中找到了这一点:http://wiki.bash-hackers.org/howto/redirection_tutorial这可以用来做同样的事情,但是所有输出也是 tee
d到终端(它没有打印"完成")。
bash: (($command 2>&1 1>&3 | tee stderr.log) 3>&1 ) | tee both.log
使用Perl 5.14.1。
tcsh
仅在这里就不够。它不支持如果没有Stdout。
使用另一个外壳或指定的脚本。
更多。
更新:
可以将其移植到TCSH?
否。tcsh不支持没有Stdout的stderr。