等待命令以bash脚本返回

时间:2010-11-15 21:47:48

标签: bash

我想做什么:

我的bash shell脚本包含modprobe -a $modulename。有时加载该模块失败并且modprobe语句卡住了。它永远不会返回,因此,我的剧本也被卡住了。

我想要做的是:调用modprobe -a $modulename,等待20秒,如果命令没有返回并且脚本仍然停留20秒,请将其称为失败并退出!

我正在寻找可能的选择。我知道timeout是一个,这将允许我在一段时间后超时。所以我在想:

timeout -t 10 modprobe -a $modulename
if [ "$?" -gt 0 ]; then
echo "error"
exit
fi

但问题是$?可以是> 0,不仅仅是因为超时,而是因为加载模块时出错,我想以不同的方式处理这两种情况。

欢迎使用超时和不使用超时的任何想法。

2 个答案:

答案 0 :(得分:5)

根据超时(1),如果命令超时,超时将以特定代码(在我的情况下为124)退出。 modprobe不太可能退出该代码,因此您可以通过更改条件来专门检查:

...

RET = “$?”; if [[“$ RET”=“124”]];然后回声超时;其他命令; elif [[“$ RET”-gt 0]];然后回声错误;出口;网络

顺便说一句,分配“$?”是一个非常的好习惯。命令后立即变量到变量。你以后会避免很多悲伤......

如果你确实需要确定,你可以查看modprobe源代码,看看它产生的退出代码,因为显然它在手册页中没有被认为是重要的......

答案 1 :(得分:0)

考虑使用“expect”,您可以设置超时以及根据modprobe的结果运行不同的命令。

此致 安德鲁。

相关问题