文字ごとに静かに読むのはうまくいきません。

文字ごとに静かに読むのはうまくいきません。

次のように、ユーザー入力文字を文字ごとに自動的に読み取ろうとします。

そして[1];
  読み取り -s -N 1
  ...
完璧

このループはxtermVNC()で完全に機能しますが、パテ(xterm)またはLinux端末と他のほとんどのテキスト端末では部分的にのみ機能します。

キーボードを「過度に」使用して同時に複数のキーを押すと問題が発生します。-sモードを使用しても、一部のキーストロークが鳴り続けます。

私も出力とstty -echo

どんなアイデアがありますか?

答え1

read -secho端末はこのコマンドの実行中にのみ無効になりますread。したがって、2つのコマンドの間に何かを入力すると、readターミナルドライバはechoそれを返します。

以下を使用せずにループを無効にしたecho後に呼び出す必要があります。read-s

if [ -t 0 ]; then
  saved=$(stty -g)
  stty -echo
fi
while read -rN1; do
  ...
done
if [ -t 0 ]; then
  stty "$saved"
fi

関連情報