1. ホーム
  2. bash

Bashのreadをタイムアウトで使うには?

2023-09-13 11:52:04

質問

ユーザーに Enter を使うことで read を呼び出すことで、彼を待たせることができます。 sleep . しかし、両方を同時に行う方法は思いつきません。ユーザーに選択肢を与えてほしいです。

プレス Ctrl + C をクリックするとキャンセルになります。 入力  で続行、または10秒待つ

どうすればいいのでしょうか?

どのように解決するのですか?

bash , read には -t オプションがあり、ここでタイムアウトを指定することができます。manページより。

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

-t timeout: タイムアウト時間内に入力の完全な行が読み込まれない場合、read をタイムアウトさせて失敗を返すようにする。 このオプションは、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

もう一つ、数秒後に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