如何将 stderr 重定向到整个管道的文件?
How to redirect stderr to a file for the whole pipe?
我是运行这样的命令:
mycmd1 | mycmd2 | mycmd3 | lp
有没有办法将整个管道的 stderr 重定向到一个文件,而不是为每个命令重复它?
也就是说,我宁愿避免这样做:
mycmd1 2>/myfile | mycmd2 2>/myfile | mycmd3 2>/myfile | lp 2>/myfile
我尝试了以下方法,似乎有效:
(mycmd1 | mycmd2 | mycmd3 | lp) 2>>/var/log/mylogfile.log
我使用 >>
因为我想追加到日志文件而不是每次都覆盖它。
或者
{ mycmd1 | mycmd2 | mycmd3 | lp; } 2>> logfile
或
( mycmd1 | mycmd2 | mycmd3 | lp ) 2>> logfile
会起作用。 (第一个版本的启动时间可能稍快(~1 毫秒),具体取决于 shell)。
我是运行这样的命令:
mycmd1 | mycmd2 | mycmd3 | lp
有没有办法将整个管道的 stderr 重定向到一个文件,而不是为每个命令重复它?
也就是说,我宁愿避免这样做:
mycmd1 2>/myfile | mycmd2 2>/myfile | mycmd3 2>/myfile | lp 2>/myfile
我尝试了以下方法,似乎有效:
(mycmd1 | mycmd2 | mycmd3 | lp) 2>>/var/log/mylogfile.log
我使用 >>
因为我想追加到日志文件而不是每次都覆盖它。
或者
{ mycmd1 | mycmd2 | mycmd3 | lp; } 2>> logfile
或
( mycmd1 | mycmd2 | mycmd3 | lp ) 2>> logfile
会起作用。 (第一个版本的启动时间可能稍快(~1 毫秒),具体取决于 shell)。