我想做什么:
我的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,不仅仅是因为超时,而是因为加载模块时出错,我想以不同的方式处理这两种情况.
任何使用超时和不使用超时的想法都是受欢迎的.
根据超时(1),如果命令超时,超时将退出特定代码(在我的情况下为124).modprobe不太可能退出该代码,因此您可以通过更改条件来专门检查:
...
RET = "$?"; if [["$ RET"="124"]]; 然后回声超时; 其他命令; elif [["$ RET"-gt 0]]; 然后回声错误; 出口; 科幻
顺便说一句,这是一个非常好的做法分配"$?" 命令后立即变量到变量.你以后会避免很多悲伤......
如果你真的需要确认,你可以查看modprobe源代码,看看它产生的退出代码,因为显然它在其手册页中被认为不够重要......