停止等待用户输入

停止等待用户输入

我正在尝试实现一个等待时间,用户可以按任意键选择跳过该等待时间。此外,它不能在终端上打印任何内容,因为我正在使用它来显示进度条。我很难捕捉和测试用户输入,更困难的是它不能导致总等待时间进一步延迟。

以下是我目前所拥有的:

read -t 0 input </dev/tty1
   if [[ $input -ne "" ]]; then
exit 0
fi

这是在更新进度条的循环内。它成功地避免了增加更多延迟或打印不需要的行,但它没有实现其功能。

-t 0 不添加进一步延迟

从“/dev/tty1”读取不会添加不需要的行

我怎样才能实现这个目标?

答案1

信不信由你,正是零让你陷入了困境。如果你把它改成一个非常小的数字,比如 .01,它就会起作用。你可以像这样进一步简化它:

if $(read -t.01 -sn1); then exit 0; fi

答案2

你想运行两件事平行线。

  1. 读取输入等待 5 秒(例如)
  2. 更新进度条(显示5秒已完成)

为实现这一点,请不要将read命令放在循环内。

相反,做这样的事情:

for i in {1..10}; do sleep 0.5s; echo ${i}0; done | zenity --progress --auto-close --text="waiting for input...5sec" 2>/dev/null &  
read -t 5 asd && kill $!

(将以上两行放入一个文件(例如 abc.sh)并运行它bash abc.sh

解释 :

第一个命令(更新进度条)被发送到后台&. 如果读取命令先完成,kill $!则会关闭进度条。

备注:结账 GNU 并行.这将帮助你同时做更多的事情。

相关内容