如何在bash中设置时间限制

4

我正在用Bash创建一个简单的问答游戏。我想要在一定的时间限制内运行问题。如何实现?谢谢。

我尝试使用这个命令:

sleep 2m && kill $$ & 

但它会终止整个脚本。 另外:我想显示一个“时间到了”的短语。

4个回答

2

与您最初的尝试类似,考虑创建一个子进程,使其休眠并发送一个信号,但这一次是可以被捕获的信号:

handle_hup() {
  echo "Times up"
  # do more things
}

trap handle_hup SIGHUP

mypid=$$
(sleep 2m && kill -HUP $mypid)&

echo "Quiz question: ..."

2

timeout 命令可能是你需要的。例如:

$ timeout 120 your-game-command

您可以通过查看退出状态来了解命令是否根据文档超时:
如果命令超时,则以状态124退出。

1

由于您没有展示完整的代码或需求,因此在此仅提供一小段代码,它将等待用户输入10秒钟,否则将打印用户已超时,您可以将其视为起点,并根据需要调整到您的脚本中。

read -t 10 -p "User, please enter your Input or it will time out in 10 seconds." ; echo ; date

0
我遇到了一个问题,需要导出许多函数和变量才能设置超时。与其导出整个环境,我发现以下超时配置更简单:
MyFunction "${MyArguments[@]}" & # trailing ampersand (&) causes MyFunction to execute in background (with current environment)
zPid="$!" # bash $! provides the most recent background process id
timeout 2s bash -c wait $zPid # wait for MyFunction to finish (timeout after 2 seconds)
if [[ 124 = "$?" ]]; then # see man timeout for other error codes
   echo "MyFunction timed out."
fi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接