我可以要求用户按Enter使用read
,并让他通过调用等sleep
。但是我想不出同时做这两种方式的方法。我希望用户可以选择:
按Ctrl+C取消,Enter 继续或仅等待10秒钟
我怎样才能做到这一点?
Answers:
在中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
#!/bin/bash
而不是开头#!/bin/sh
。后者可能有效也可能无效,这取决于/bin/sh
实际使用的二进制文件。你可以写#!/bin/sh
,当且仅当你的脚本是POSIX兼容的,它几乎肯定是没有的。
#!/bin/bash
,而不是#!/bin/sh
,因为该-t
选项与POSIX不兼容(因为脚本可能无法在每台计算机上运行)