使用read(bash)在while循环中禁用睡眠期间的用户输入



我有一个带有while循环的小bash脚本,它等待用户输入,做一些事情,然后休眠一段时间:

while true; do
read input
echo $input
sleep 5
done

我不希望它在睡眠期间接受任何用户输入。问题是,在睡眠期间在shell中输入的任何输入都会在脚本继续时得到处理。是否可以在睡眠期间完全禁用用户输入?

我看到过这样的情况:在bash中的无限循环中禁用用户输入,但这对我没有真正的帮助,是吗?

希望有人能帮我。

这就是需要的:

#!/usr/bin/env bash

hideinput(){
[ -t 0 ] && stty -echo -icanon time 0 min 0
}
cleanup(){ 
[ -t 0 ] && stty sane
}
trap cleanup EXIT
trap hideinput CONT
while true; do
while read -t 0.001 -n 10000 discard; do :; done # Discard anything already inputted.
cleanup
read -p "Input something   :  " input
hideinput
echo "What you inputted : " $input
sleep 5
done

我不知道如何或是否可以禁用用户输入,但如果你只是想让一些交互式程序不接受启动前的输入,你可以在程序命令之前使用以下命令:

perl -MPOSIX -e 'tcflush 0,0'

这将导致终端忽略先前的用户输入,但终端仍将继续打印用户键入的任何内容。如果您想暂时禁用此行为,可以添加以下命令:

stty -echo
...
stty echo

你的脚本会是什么样子:

while true; do
perl -MPOSIX -e 'tcflush 0,0'
read input
echo $input
stty -echo
sleep 5
stty echo
done

相关内容

  • 没有找到相关文章

最新更新