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"

我似乎找不到任何有关如何在线任何地方检测该回车键的示例。

我认为基于read的返回代码,这个问题有一个解决方法。从readman页,

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.

超时的返回代码似乎142[在 Fedora 16 中验证]

因此,脚本可以修改为,

#!/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 [ $? -eq 0 ]
then
break
fi
done
echo "Resume script"

问题是read默认会将换行符视为分隔符。

IFS设置为 null 以避免读取分隔符

说:

IFS= read -s -N 1 -t 1 key

相反,您会在read期间按Enter键时获得预期的行为。

相关内容

  • 没有找到相关文章