我有一个oneliner,不可避免地会产生一些我想忽略的错误,所以我试图将它重定向到一个文件,但它一直出现在屏幕上。这就是它的样子:
command1 | command2 | command3 1> stdout.txt 2> stderr.txt
我也尝试将它们发送到同一个文件(使用&>),但stderr只是不想这样,而且非常令人沮丧。
答案 0 :(得分:2)
stderr
文件描述符不通过管道,只有stdout
。你可以试试
commandThatDoesNotExist | less
您在less
中看不到任何内容,但错误将写在终端上。要管道stderr
文件描述符,请将其重定向到stdout
点
commandThatDoesNotExist 2>&1 | less
现在您在less
中看到了错误。
为了在终端上没有stderr
,您必须将每个命令的文件描述符重定向到stderr
文件:
command 1 2>stderr.txt | command 2 2>stderr.txt | command 3 2>stderr.txt 1>stdout.txt
答案 1 :(得分:1)
您需要为管道的每个阶段重定向stderr。您可以按如下方式执行此操作:
command1 2>&1 | command 2
或(至少用bash):
command1 |& command2
(参见bash man page的管道部分)。