-1

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

控制.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。如果我将它粘贴到命令行中是完美的,但是当我在脚本中运行时非常糟糕。

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

我解决了这个问题:

我将 $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
4

1 回答 1

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=$?
于 2013-04-12T03:30:16.893 回答