在shell脚本中,我必须运行一个命令,我需要确定返回代码是什么,但事实证明命令的输出转到stderr并且还输出用户的密码(不幸的是,命令的参数;不好,我知道。)
我至少希望过滤掉显示的密码。
fontName='regular'
给我命令的返回码
cmd ${OPTIONS}
RETURNCODE=$?
成功过滤PASSWD,但返回码始终为0 - sed的值,而不是初始命令。
任何技巧?
答案 0 :(得分:1)
有几种技巧。在bash中,您可以检查数组PIPESTATUS。对于便携式解决方案,您可以执行以下操作:
RETURNCODE=$({ { cmd $OPTIONS 3>&1 1>&2 2>&3; echo $? >&4; } | sed ... >&2; } 4>&1 )
这具有保留cmd
行为的良好副作用,并且sed的输出以与cmd
的输出相同的方式进入stderr。 (这是否真的是可取的是一个不同的问题!)