【发布时间】:2015-09-12 06:23:53
【问题描述】:
我想将stdout和stderr的输出重定向到一个公共文件:
./foo.sh >stdout_and_stderr.txt 2>&1
但也将 stderr 重定向到单独的文件。我尝试了以下变体:
./foo.sh >stdout_and_stderr.txt 2>stderr.txt 2>&1
但它们都不能在 bash 中正常工作,例如stderr 仅被重定向到输出文件之一。重要的是,合并后的文件保留第一个代码 sn-p 的行顺序,因此不会转储到单独的文件并稍后合并。
在 bash 中有一个巧妙的解决方案吗?
【问题讨论】:
-
我认为您无法通过单个进程来做到这一点,当然也不能像问题所示那样简单地扭曲重定向。您可能可以通过管道将某些内容发送到
tee,但由于缓冲等原因,结果的交错可能与您在终端屏幕上看到的不同。 -
请注意,您的第一个命令 (
./foo.sh 2>&1 >file) 将错误发送到原始标准输出,并将标准输出(但不是重定向的标准错误)发送到文件。如果你想同时使用file,你必须使用./foo.sh >file 2>&1,颠倒重定向的顺序。它们被解释为从左到右阅读。 -
说得对,刚刚修复了 2>&1 的顺序,谢谢@JonathanLeffler
标签: bash