繁体   English   中英

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

[英]Bash Script: Execute multiple command in single line && get the return code

我有一个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。如果我将其粘贴在命令行中是完美的工作,但是当我在脚本中运行时非常糟糕。

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

我解决了这个问题:

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

看一下脚本实际打印的内容,这应该为您提供退出状态为何为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=$?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM