无法将stderr重定向到文件

时间:2013-11-21 00:30:30

标签: bash shell debian stdout stderr

我有一个oneliner,不可避免地会产生一些我想忽略的错误,所以我试图将它重定向到一个文件,但它一直出现在屏幕上。这就是它的样子:

command1 | command2 | command3 1> stdout.txt 2> stderr.txt

我也尝试将它们发送到同一个文件(使用&>),但stderr只是不想这样,而且非常令人沮丧。

2 个答案:

答案 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的管道部分)。