bash,非阻塞标准输入/控制台输入

时间:2016-06-28 11:48:07

标签: bash

我想写(使用bash)像

这样的东西
while no_user_key_pressed
{
  do_something....
}

有一些选项可以使用C ++,Java,ncurses和其他特定的o / s。我想要一个简单的bash移植功能。

应该使用

^ c 中断来终止剩余的代码。想象一下:'按任意键停止测试'

2 个答案:

答案 0 :(得分:1)

您可以以不杀死剩余代码的方式捕获 Ctrl-c

$ cat test.sh 
#!/usr/bin/env bash

trap 'break' INT

while true
do
    date
    sleep 1
done

echo done
$ ./test.sh 
Tue 28 Jun 12:01:22 UTC 2016
Tue 28 Jun 12:01:23 UTC 2016
Tue 28 Jun 12:01:24 UTC 2016
^Cdone

答案 1 :(得分:1)

您可以在read -t上使用小超时。

缺点是用户必须按<返回>而不是"任何键"。

例如:

while ! read -t 0.01
do
    echo -en "$(date)\r"
done
echo "User pressed: $REPLY"

在bash 3.2(OS X)上测试

!是因为如果超时到期,read会返回失败(false)。