我有一个循环,我想打破任何用户输入。
Contrived example - 从10开始倒计时的计时器:
counter=10
while (( counter > 0 )) && [[ -z $input ]]; do
printf '\rRestart in %s seconds' "$counter"
read -n 1 -t 1 input
(( counter-- ))
done
echo "Completed"
这适用于除Enter
之外的所有用户输入,我完全期望Enter
将是最常见的输入。
如何使用Bash的Enter
命令捕获read
?
答案 0 :(得分:4)
bash手册说read
返回成功(返回代码为零),除非它超时。那怎么样:
for (( counter=10 ; counter > 0 ; counter-- )); do
printf "\rRestart in %s seconds " $counter
read -n 1 -t 1 input && break
done
echo "Completed"
答案 1 :(得分:2)
告诉读取使用NUL作为其分隔符:
IFS='' read -r -d '' -n 1 -t 1 input
所以,在完整的背景下:
counter=10; input=''
while (( counter > 0 )) && [[ -z $input ]]; do
printf "\rRestart in %s seconds" "$counter"
IFS='' read -n 1 -t 1 -d '' input
(( counter-- ))
done