Bash脚本倒计时器需要检测任何键才能继续

时间:2014-01-21 07:22:59

标签: bash

我需要在倒数计时器循环中收听任何按键。如果按下任何键,则倒数计时器应该突破它的循环。这主要是有效的,除了输入键只是让倒数计时器更快。

#!/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"

我似乎无法找到任何在线任何地方检测输入密钥的示例。

2 个答案:

答案 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 键时,您将获得预期的行为。