我需要的是 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
字段分隔符更改为下划线的行。现在该脚本可以使用空格、制表符和回车键。用引号括住测试确实更安全,所以我添加了它们。