shell脚本:执行命令的退出状态不正确

时间:2017-05-29 04:43:47

标签: shell exitstatus

我希望获得作为参数传递的命令的退出状态(到我的sh脚本a.sh)。

我试过了:

#!/bin/sh

CMD="$@"

echo "arg passed CMD: $CMD"
($CMD) >/dev/null 2>&1
res=$?
echo "exit status: $res"


CMD="echo aaa | grep -q zzz"

echo "in script CMD: $CMD"
($CMD) >/dev/null 2>&1
res=$?
echo "exit status: $res"

执行后:

./a.sh 'echo aa | grep -q zzz'
arg passed CMD: echo aa | grep -q zzz
exit status: 0
in script CMD: echo aaa | grep -q zzz
exit status: 0

但是如果我直接在shell中运行命令,我会看到:

 /bin/sh -c 'echo aa | grep -q zzz ; echo $?'
 1

我的脚本应该是什么样的,以获得正确的状态1而不是执行命令的0

1 个答案:

答案 0 :(得分:1)

$(CMD)输出为aaa | grep -q zzz,这就是它返回0的原因。只需删除重定向到/ dev / null,您就会看到。 您可以使用eval从变量运行命令。

#!/bin/sh

CMD="$@"

echo "arg passed CMD: $CMD"
eval $CMD >/dev/null 2>&1
res=$?
echo "exit status: $res"

CMD="echo aaa | grep -q zzz"

echo "in script CMD: $CMD"
eval $CMD >/dev/null 2>&1
res=$?
echo "exit status: $res"