shell脚本:已执行命令的退出状态不正确
我想获取作为参数传递给名为a.sh的sh脚本的命令的退出状态 我试过: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
#!/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"