Bash脚本:在单行&&amp ;;中执行多个命令获取返回码

时间:2013-04-12 03:12:36

标签: bash shell command-line

我有一个bash脚本文件来处理。

control.sh:

c_command="echo 'Hello'; echo ', Stack Overflow';exit 9";
$c_command;
stat=$?;

if [ $stat -eq 0 ];then
      echo 'Do something....'
elif [ $stat -eq 9 ];then
      echo 'The system will be rebooting...';
else
      echo "..."
fi

我使用变量$ c_command来执行命令,而我得到的退出代码是0而不是9。 如果我在命令行中粘贴它是完美的,但是当我在脚本中运行时非常糟糕。

通常,当我在脚本中执行“exit”命令时,脚本将退出。 我只是希望命令完成而不是脚本,并从执行的命令中获取退出代码。

我解决了这个问题:

我将$ c_command中的代码放到脚本文件中并运行它。

c_command="echo 'Hello'; echo ', Stack Overflow';exit 9";
echo "${c_command}" > tmp.sh;
/bin/bash tmp.sh;
stat=$?;

if [ $stat -eq 0 ];then
      echo 'Do something....'
elif [ $stat -eq 9 ];then
      echo 'The system will be rebooting...';
else
      echo "..."
fi

1 个答案:

答案 0 :(得分:2)

看看你的脚本实际打印的内容,这应该可以让你知道退出状态为0的原因:

$ bash ./control.sh
'Hello'; echo ', Stack Overflow';exit 9
Do something....

扩展c_command后,分号不会被视为命令分隔符,而是视为文字字符。因此,您只有一个echo命令退出0,而不是一对echo命令后跟exit命令。

不应将代码存储在字符串中,而应使用函数:

c_command () {
    echo 'Hello'; echo ', Stack Overflow';return 9 
}
c_command
stat=$?