Bash环境下AWS CLI错误输出重定向不生效,如何隐藏报错?
问题根因
你的重定向规则配置存在两处逻辑错误:
- 你写的
2>&1 >/dev/null是作用在管道右侧的grep命令上的,产生错误输出的aws命令的stderr完全没有被重定向,所以会直接打印到终端 - Bash的重定向是按从左到右顺序执行的,就算你把重定向规则挂载到aws命令上,写
2>&1 >/dev/null也无法隐藏stderr:你先把stderr指向了当前的stdout终端,后续再把stdout改向到/dev/null,stderr不会同步更新指向,还是会输出到终端。
解决方案
根据你的需求,推荐两种写法:
写法1:直接丢弃aws的错误输出(性能最优)
直接把aws命令的stderr单独重定向到/dev/null,不进入管道处理:
aws rds describe-db-instances --db-instance-identifier test-db 2>/dev/null | grep -qi DBInstanceStatus >/dev/null
写法2:把aws的stderr接入管道处理
如果后续需要对错误输出做过滤处理,可以先把aws的stderr合并到stdout再进入管道:
aws rds describe-db-instances --db-instance-identifier test-db 2>&1 | grep -qi DBInstanceStatus >/dev/null
内容的提问来源于stack exchange,提问作者Abhi S
相关产品推荐
相关产品推荐

