Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
shell脚本:已执行命令的退出状态不正确_Shell_Exitstatus - Fatal编程技术网

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

shell脚本:已执行命令的退出状态不正确,shell,exitstatus,Shell,Exitstatus,我想获取作为参数传递给名为a.sh的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=$? e

我想获取作为参数传递给名为a.sh的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

$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"