【发布时间】:2014-03-23 19:55:32
【问题描述】:
我是论坛的新手,如果这篇文章不正确,我很抱歉。
我的代码如下:
#!/bin/bash
number=0
while (true); do
echo "Your number is: $number"
echo ""
echo "Press space to add one to your number."
echo ""
read -t 1 -n 1 input
if [ "$input" == " " ]; then
number=$((number+1))
fi
done
我想让这个人不能只是按住空格键来增加数字。有没有办法让这个人只有在超时完成后才能按空格键?
换句话说,如果你在 0.25 秒时输入一个键,你不会直接跳到下一步,程序还要等待 0.75 秒才能继续,因此总共需要 1 秒。
就像在没有-n 1 的普通read 命令中按回车键提交输入一样,即使超时未完成,它也会继续。另一种方法是在读取用户输入时休眠,并在休眠完成后终止它。
我也试过这个:
read -n 1 input & sleep 1 & wait
然后弹出这个:
[15] 94977
[16] 94978
[15]+ Stopped read -n 1 input
[16] Done sleep 1
当它应该同时运行它们时,为什么它会停止进程?以下代码同时运行所有三个:
sleep 1 & sleep 2 & sleep 3 & wait
总共休眠 3 秒,而不是 6 秒。
我希望你明白我在说什么。
【问题讨论】:
-
仅供参考,
while (true)的效率远低于while true,因为它会生成一个子shell 并在其中调用true。
标签: macos bash shell input terminal