如何将stderr重定向到整个管道的文件?

时间:2016-11-26 22:26:44

标签: bash pipe stderr

我正在运行这样的命令:

mycmd1 | mycmd2 | mycmd3 | lp

有没有办法将stderr重定向到整个管道的文件,而不是为每个命令重复它?

也就是说,我宁愿避免这样做:

mycmd1 2>/myfile | mycmd2 2>/myfile | mycmd3 2>/myfile | lp 2>/myfile

2 个答案:

答案 0 :(得分:7)

要么

{ mycmd1 | mycmd2 | mycmd3 | lp; } 2>> logfile

( mycmd1 | mycmd2 | mycmd3 | lp ) 2>> logfile

会奏效。 (根据shell的不同,第一个版本的启动时间可能稍微快一些(〜1ms)。

答案 1 :(得分:0)

我尝试了以下内容,似乎有效:

(mycmd1 | mycmd2 | mycmd3 | lp) 2>>/var/log/mylogfile.log

我使用>>因为我想要附加到日志文件而不是每次都覆盖它。