我大概有以下代码:
cat infile | while read line; do
echo 2> 'log ' $line
echo $line
done > outfile
outfile
已正确创建。然而,STDERR 输出就消失了:它既不显示在终端上,也不显示在outfile
.如果我用上面的最后一行替换,done > outfile 2> errfile
则errfile
创建,但为空。
我可以从循环内捕获错误输出,最好是将其直接流式传输到父 STDERR 中(上面是一个较大脚本的一部分,其标准错误流由另一个进程捕获)?
答案1
你的语法是错误的:它不应该>&2
是2>
。
答案2
您的示例不起作用,因为在循环内您正在使用 重定向 stderr 2>
。然后当你尝试重定向它时再次在循环之外,流中没有任何内容可以重定向。
看起来这就是您真正想做的事情:
cat infile | while read line; do
echo >&2 'log ' $line
echo $line
done > outfile 2> errfile
这应该按预期重定向 while 循环内部的所有错误。除非您已经在循环内重定向了错误,如问题中的示例。