bash に移動する必要がある古いシェル スクリプトがあります。このスクリプトは、いくつかのアクティビティの進行状況を出力し、ユーザーのコマンドを待ちます。ユーザーが 15 秒間何も操作しない場合、画面は新しい進行状況で再描画され、タイマーが再び開始されます。これが私の問題です:
私は使用しようとしていますread -t 15 myVar
-この方法で、15秒の待機ループが再開されます。ただし、問題を引き起こすシナリオがあります。
- 画面が再描画され、スクリプトが入力を待機します (「
Enter command:
」が出力されます) - ユーザーは入力します
foo
が、押しませんenter foo
15 秒後、画面は再び再描画され、スクリプトは入力を待機します -画面のどこにも表示されないことに注意してください(「Enter command:
」が出力されます)。- ユーザーが入力
bar
して押すenter
この時点で、変数$myVar
は ' foobar
' を保持しています。
私が必要なものは何?ユーザーが最初に入力した文字列を見つける方法を探しているので、ステータスを更新した後に再表示できます。このようにして、ユーザーは次のように表示されます。
Enter command: foo
Solaris ではstty -pendin
、入力をある種のバッファーに保存するために使用でき、リフレッシュ実行後にバッファーstty pendin
からこの入力を取得して画面に出力することができました。
機能に相当する Linux はありstty pendin
ますか? または、私の問題に対するbashの解決策を知っていますか?