捕获linux命令的所有输出、错误、警告及其出现顺序

捕获linux命令的所有输出、错误、警告及其出现顺序

在 Linux 中,我们可以将 stdout 和 stderr 或两者都重定向到文件。例如:

  • 将 stdout 和 stderr 重定向到两个文件:command 1>out 2>err.通过这种方式,我们可以将输出和错误分离在两个不同的文件中。
  • 将 stdout 和 stderr 重定向到文件:command &>all.通过这种方式,我们可以捕获输出和错误消息的出现顺序。

我想结合上面的两个命令:command 1>out 2>err &>all,捕获输出和错误的出现顺序,并将输出和错误分开。但上面的命令不起作用,outerr文件都是空的。如果我颠倒顺序,该all文件将为空。那么,有没有办法按照我的意愿将上面的两个命令组合起来?

答案1

其中bash有点棘手:

command 2> >(tee err) 1> >(tee out) | tee >all

这里我们需要流程替代 >(...)tee解决该问题。通过进程替换,tee进程被附加到相应的通道。tee然后将这些行写入文件中然后打印到STDOUT.因此,写入文件后,STDERR和都STDOUT将被打印到STDOUT.在 中bash,我们不能在一个命令中使用同一通道的多个重定向。这就是为什么我们需要再次通过管道传输输出tee,然后打印它。


内(注意必须设置zsh该选项,该选项在 中是默认的):MULTIOSzsh

command >out 2>err &>all

相关内容