web-dev-qa-db-ja.com

Bash readをタイムアウトで使用する方法は?

ユーザーに押すように頼むことができます Enter readを使用し、sleepを呼び出して待機させます。しかし、両方を同時に行う方法は考えられません。ユーザーに選択肢を与えてほしい:

- 押す Ctrl+C キャンセルします、 Enter続行するか、10秒だけ待つ

どうやってやるの?

64
qdii

bashで、readには-tオプションでは、タイムアウトを指定できます。マンページから:

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

-t timeout:入力の完全な行がtimeout秒以内に読み取られない場合、読み取りをタイムアウトさせ、失敗を返します。 readが端末またはパイプから入力を読み取っていない場合、このオプションは効果がありません。

以下のトランスクリプト(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

もう1つは、数秒後に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
119
paxdiablo

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