在linux bash上,我想确保命令执行花费10秒或更长时间,因此,如果提早完成,我需要添加一些睡眠,以便整体执行将花费10秒以上。
如果您想知道为什么要确保第三方后台守护程序作业(每10秒运行一次)将它接起来。
我所拥有的是:
public static float calcFeetAndInchesToCentimeters(int inches){
if(inches >= 0){
return (float)inches / 12;
}else{
return -1;
}
}
但这将使整体执行时间增加10秒,因此,如果命令本身花费10秒或更长的时间,它将仍然增加10秒。如果命令花费的时间少于10秒,有没有办法睡觉?
编辑:
我还希望在执行结束时返回sleep 10; my_command.sh
的退出代码。因此,包括睡眠在内的整个命令应返回与my_command.sh
相同的退出代码。
答案 0 :(得分:4)
您可以在后台运行sleep 10
,并在wait
完成后运行my_command.sh
。
sleep 10 & my_command.sh; wait
如果还有其他后台作业,它也会等待它们。在这种情况下,您可以在 subshell 中运行它,例如:
( sleep 10 & my_command.sh; wait )
或将sleep 10
的PID保留在变量中并等待它,因此my_command.sh
将在当前执行环境中运行,例如:
sleep 10 & pid=$!; my_command.sh; wait "$pid"
答案 1 :(得分:4)
使用bash:
#!/bin/bash
SECONDS=0
# place your code here
rest=$((10-$SECONDS))
[[ $rest -gt 0 ]] && sleep $rest
更新:使用函数并将返回码保存到变量:
#!/bin/bash
foo() {
local SECONDS=0
local returncode
# place your code here
returncode=$?
rest=$((10-$SECONDS))
[[ $rest -gt 0 ]] && sleep $rest
return $returncode
}
foo
echo $?