Bash 按任意键可在5秒内中止
嗨,我正在尝试实现一个事件,该事件将在5秒倒计时后发生,除非按下一个键。我一直在使用此代码,但如果按enter或空格键,它将失败。如果回车或空格被检测为“”,则它将失败 看完这篇文章,, 我放弃了,贴在这里。我觉得一定有比我尝试实现的更好的方法。中的涵盖了问题的“检测Bash 按任意键可在5秒内中止,bash,user-input,Bash,User Input,嗨,我正在尝试实现一个事件,该事件将在5秒倒计时后发生,除非按下一个键。我一直在使用此代码,但如果按enter或空格键,它将失败。如果回车或空格被检测为“”,则它将失败 看完这篇文章,, 我放弃了,贴在这里。我觉得一定有比我尝试实现的更好的方法。中的涵盖了问题的“检测输入”部分。您可以从read查看退出代码 关于处理空间,有两个答案 空格的问题是,在正常情况下,read在将输入分配给给定变量时,会修剪输入的前导和尾随空格(word会分割输入) 有两种方法可以避免这种情况 您可以避免使用自定义命
输入
”部分。您可以从read
查看退出代码
关于处理空间,有两个答案
空格的问题是,在正常情况下,read
在将输入分配给给定变量时,会修剪输入的前导和尾随空格(word会分割输入)
有两种方法可以避免这种情况
$REPLY
。当分配给$REPLY
时,不会执行空格修剪或分词。(虽然我刚刚在POSIX规范中找不到它,所以这可能是某种非标准和/或不可移植的扩展。)read
命令,显式地将IFS
设置为空字符串,这样它就不会执行空格修剪或分词
$ IFS= read -r -s -n 1 -t 5 -p "Press any key to abort in the next 5 seconds." key; echo $?
# Press <space>
0
$ declare -p key
declare -- k=" "
$ unset -v k
$ IFS= read -r -s -n 1 -t 5 -p "Press any key to abort in the next 5 seconds." key; echo $?
# Wait
1
$ declare -p key
-bash: declare: k: not found
$IFS=read-r-s-n1-t5-p“在接下来的5秒内按任意键中止”;回声$?
#压榨
0
$declare-p密钥
声明--k=“”
$unset-VK
$IFS=read-r-s-n1-t5-p“按任意键在接下来的5秒内中止。”键;回声$?
#等等
1.
$declare-p密钥
-bash:declare:k:未找到
阅读
手册说明:
read
的返回代码为零,除非遇到文件结尾
或者读出时间
在您的情况下,当用户在允许的时间内点击任何键时,您希望中止或继续
#!/bin/bash
if read -r -s -n 1 -t 5 -p "TEST:" key #key in a sense has no use at all
then
echo "aborted"
else
echo "continued"
fi
参考资料:
注意:
引文中的重点是我的。如果在键的顶部设置一个虚拟值,即
key=nones此类
,会发生什么?祝你好运,这真是个好主意。谢谢这种方式看起来非常优雅,而这就是我最后做这件事的方式。非常感谢您的回复。
#!/bin/bash
if read -r -s -n 1 -t 5 -p "TEST:" key #key in a sense has no use at all
then
echo "aborted"
else
echo "continued"
fi