过滤stderr并获取初始返回码

时间:2015-08-20 20:20:07

标签: shell ksh

在shell脚本中,我必须运行一个命令,我需要确定返回代码是什么,但事实证明命令的输出转到stderr并且还输出用户的密码(不幸的是,命令的参数;不好,我知道。)

我至少希望过滤掉显示的密码。

fontName='regular'

给我命令的返回码

cmd ${OPTIONS}
RETURNCODE=$?

成功过滤PASSWD,但返回码始终为0 - sed的值,而不是初始命令。

任何技巧?

1 个答案:

答案 0 :(得分:1)

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

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

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