如何在将stdout通过管道传递时仅捕获stderr到变量?
仅捕获stderr到变量,同时让stdout正常通过管道传递
我需要实现:仅将命令的stderr输出捕获到变量中,同时让stdout像往常一样通过管道传递给其他命令,理想情况下不使用临时文件。
我已经尝试过以下方法,但都存在问题:
- 使用
_output="$(cat "$_filename" 2>&1)"可以把命令的所有输出(stdout+stderr)捕获到变量里,但处理大文件时可能无法正常工作,且不符合我只捕获stderr的需求。 - 尝试用进程替换给变量赋值,但子shell中的赋值无法生效:
cat file.txt > >(cat) 2> >(_output="$(cat 2>&1)") - 下面的方法能处理stderr输出,但无法将错误内容存入变量,灵活性不足:
cat file.txt > >(cat) 2> >(sed 's/^cat: /error: /' >&2) echo "The quick brown" | cat > >(cat) 2> >(sed 's/^cat: /error: /') - 用tee将错误输出写入日志文件是可行的,但这并非我想要的理想方案。
内容的提问来源于stack exchange,提问作者Mike T.
相关产品推荐
相关产品推荐

