我有一个带有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