在 while 循环中写入错误流

在 while 循环中写入错误流

我大概有以下代码:

cat infile | while read line; do
    echo 2> 'log ' $line
    echo $line
done > outfile

outfile已正确创建。然而,STDERR 输出就消失了:它既不显示在终端上,也不显示在outfile.如果我用上面的最后一行替换,done > outfile 2> errfileerrfile创建,但为空。

我可以从循环内捕获错误输出,最好是将其直接流式传输到父 STDERR 中(上面是一个较大脚本的一部分,其标准错误流由另一个进程捕获)?

答案1

你的语法是错误的:它不应该>&22>

答案2

您的示例不起作用,因为在循环内您正在使用 重定向 stderr 2>。然后当你尝试重定向它时再次在循环之外,流中没有任何内容可以重定向。

看起来这就是您真正想做的事情:

cat infile | while read line; do
    echo >&2 'log ' $line
    echo $line
done > outfile 2> errfile

这应该按预期重定向 while 循环内部的所有错误。除非您已经在循环内重定向了错误,如问题中的示例。

相关内容