我需要在倒数计时器循环中收听任何按键。如果按下任何键,则倒数计时器应该突破它的循环。这主要是有效的,除了输入键只是让倒数计时器更快。
#!/bin/bash
for (( i=30; i>0; i--)); do
printf "\rStarting script in $i seconds. Hit any key to continue."
read -s -n 1 -t 1 key
if [[ $key ]]
then
break
fi
done
echo "Resume script"
我似乎无法找到任何在线任何地方检测输入密钥的示例。
答案 0 :(得分:8)
我认为根据read
的返回代码,可以解决这个问题。来自man
的{{1}}页,
read
超时的返回码似乎是The return code is zero, unless end-of-file is encountered, read times out,
or an invalid file descriptor is supplied as the argument to -u.
[在Fedora 16中验证]
因此,脚本可以修改为,
142
答案 1 :(得分:1)
问题是read
默认情况下 将换行视为分隔符。
将IFS
设置为null,以避免读取至分隔符。
说:
IFS= read -s -N 1 -t 1 key
相反,在read
期间点击 Enter 键时,您将获得预期的行为。