IT-Swarm.Net

如何使用Bash读取超时?

我可以要求用户按 Enter 通过使用read,让他等待调用sleep。但我想不出同时做两件事的方法。我希望用户可以选择:

- 按 Ctrl+C 取消, Enter继续或只是等待10秒

我怎样才能做到这一点?

61
qdii

bash中,read有一个-t选项,您可以在其中指定超时。从联机帮助页:

read [-ers] [-u fd] [-t timeout] [-a aname] [-p Prompt] [-n nchars] [-d delim] [name ...]

-t timeout:导致读取超时,如果在超时秒内未读取完整的输入行,则返回失败。如果读取不是从终端或管道读取输入,则此选项无效。.

下面的成绩单(没有点击ENTER):

$ date ; read -t 10 -p "Hit ENTER or wait ten seconds" ; echo ; date
Tue Feb 28 22:29:15 WAST 2012
Hit ENTER or wait ten seconds
Tue Feb 28 22:29:25 WAST 2012

另一个,几秒后击中ENTER:

$ date ; read -t 10 -p "Hit ENTER or wait ten seconds" ; date
Tue Feb 28 22:30:17 WAST 2012
Hit ENTER or wait ten seconds
Tue Feb 28 22:30:19 WAST 2012

而另一个,击中CTRL-C:

$ date ; read -t 10 -p "Hit ENTER or wait ten seconds" ; echo ; date
Tue Feb 28 22:30:29 WAST 2012
Hit ENTER or wait ten seconds
114
paxdiablo

快速,可靠且价格合理的云托管

注册并在30天内获得$50奖金!

read内置有一个超时。.

read -t 10

会做的

15
Johannes Weiss

bash参考手册

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p Prompt][-t timeout][-u fd] [name ...]

1
Benoit