批量超时替代方案?

批量超时替代方案?

我需要的是 80 秒的睡眠,我可以通过按一个键跳过它。能够看到剩余时间将是一个优势。

答案1

一个更简单的方法是

read -t 80 -n 1 -s -p "Hit a key to continue"

但您将看不到剩余时间。如果您想查看剩余时间,可以使用包含子 shell 的更复杂的脚本:

( for i in {80..0}; do
    echo Wait for $i seconds or press any key;
    sleep 1;
  done )&
read -t 80 -n 1 -s; kill $!

可以说,该kill命令有些不安全,尽管子 shell 不太可能无法休眠并提前终止,从而使无辜的进程有可能重用其 PID 并被杀死。

答案2

一个非常简单的脚本可以是:

#!/bin/bash

IFS=_
count=80
echo "hit a key:"
while [ $count -ge 1 ]
do
    echo -e -n "\rtime remaining: $count"
    read -n 1 -s -t 1 myresponse
    if [ "$myresponse" ]
    then
        echo -e -n "\nyou entered: $myresponse\n"
        break
    fi
    ((count--))
done
if [ $count -eq 0 ]
then
    echo -e -n "\nyou did not entered anything\n"
fi

编辑:添加了将IFS字段分隔符更改为下划线的行。现在该脚本可以使用空格、制表符和回车键。用引号括住测试确实更安全,所以我添加了它们。

相关内容