2017-05-29 126 views
0

我想获取作为参数传递的命令的退出状态(到我的sh脚本a.sh)。shell脚本:执行命令的退出状态不正确

我已经试过:

#!/bin/sh 

CMD="[email protected]" 

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

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

#!/bin/sh 

CMD="[email protected]" 

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" 
相关问题