分别和stderr分别同时记录stdout和stderr



我有一个特定的问题,我想解决,并且我正在通过perl运行system,我认为它在bash中运行:

  1. both.log中显示stdoutstderr。添加"完成"(如果完成)。
  2. 附录 stderr in stderr.log
  3. 请勿打印到终端,除了原始命令,如果命令完成了。

因此,一旦我们组合了stdoutstderr,我们可以再次将它们分开吗?或我们可以首先捕获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。

相关内容

  • 没有找到相关文章