bashのプログラムにて、sleep 2s としてエラーメッセージを表示してから2秒後にループに戻る、という機能を実装しました。しかし、待っている2秒間に入力した文字が画面に出力され、次の入力にその文字が反映されてしまいます。さらに、入力した文字の分だけ削除することができてしまいます(画像参照)。これはsleepの使用上どうにもならないことでしょうか。
また、こういった誤入力を受け付けないようにするにはどのようにしたらいいでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
入力文字を捨ててから表示するのはどうでしょうか?
bash
1#!/bin/bash 2function choice(){ 3 echo " $1" 4} 5while read -p "選択してください> " no ; do 6 case $no in 7 1 ) { 8 choice 1 9 };; 10 2 ) { 11 choice 2 12 };; 13 3 ) { 14 choice 3 15 };; 16 4 ) { 17 choice 4 18 };; 19 5 ) { 20 choice 5 21 };; 22 99 ) { 23 choice 99 24 break 25 };; 26 * ) { 27 echo "[エラー] 1~5 または99を選択してください" 28 read -t 2 -n 1000 discard 29 };; 30 esac 31done
投稿2017/08/17 03:57
編集2017/08/17 04:01総合スコア4070
0
キーの入力待ちは、readコマンドを使うといいですよ。
こちら(BASHシェルスクリプトで「キー入力待ち」プロンプトを実装する)が参考になるかと。
投稿2017/08/17 02:28
総合スコア25138
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/17 03:01
2017/08/17 04:14
2017/08/17 04:29 編集
2017/08/17 07:39
0
ベストアンサー
ちょっとテストし切れてませんが、多分これで読み捨てられると思います。
Bash
1while read -t 0.001 -N 1 dmy 2do : 3done
投稿2017/08/17 02:28
総合スコア84423
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/17 02:48
2017/08/17 03:15
2017/08/17 04:02
2017/08/17 04:20
2017/08/17 04:26
2017/08/17 06:53
2017/08/17 07:35
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/17 07:37