过滤stderr并获取初始返回代码 [英] Filter stderr AND get initial return code

查看:0
本文介绍了过滤stderr并获取初始返回代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在一个外壳脚本中,我必须运行一个命令,我需要确定该命令的返回代码是什么,但结果是该命令的输出转到了stderr,还输出了用户的密码(不幸的是,这是该命令的一个参数;我知道是错误的)。

我至少要筛选密码,使其不会被重新显示。

cmd ${OPTIONS}
RETURNCODE=$?

给我该命令的返回代码

cmd ${OPTIONS} 3>&1 1>&2 2>&3 | sed "s:${PASSWD}:******:"
RETURNCODE=$?

成功筛选密码,但返回代码始终为0,即sed的代码,而不是初始命令的代码。

有什么窍门吗?

推荐答案

有几种技术。在bash中,您可以检查数组PIPESTATUS。对于便携解决方案,您可以执行以下操作:

RETURNCODE=$({ { cmd $OPTIONS 3>&1 1>&2 2>&3; echo $? >&4; } | sed ... >&2; } 4>&1 )

这有一个很好的副作用,即保留cmd的行为,并且sed的输出以与cmd相同的方式进入stderr。(这是否真的可取则是另一个问题!)

这篇关于过滤stderr并获取初始返回代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆