エラー読み出し機能のエコーを抑制する方法

エラー読み出し機能のエコーを抑制する方法

シェルスクリプトでキーストロークをキャプチャしようとしています(たとえばread、私が見つけた3つの方法はstty -echoスイッチ-sとストリームのリダイレクトです)。

しかし、FreeBSDを使用して実装されているように見えるmacOSでは、どちらも一貫して動作しません。

次のスクリプトは問題を示しています。

while true; do
    stty -echo
    read -s -n 1 CHAR &>/dev/null
    stty echo
done

上下の矢印を同時に押すと、時々コマンドがエコーされA^[[BたりB^[[A、これは、特に機械が遅く(バッテリーが不足しているため)、ある種の競合状態を示す場合によく発生します。

私は何を逃したことがありませんか?それ以外の場合、この問題をどのように解決できますか?

ベストアンサー1

ループには、ループの終わりの「stty echo」と次の反復の「stty -echo」の間に短い時間間隔があります。このウィンドウで受信したキーボード入力は、待機中の読み取りコマンドがなくてもエコーされます。エコーしたくない場合は、「stty echo」を呼び出さないでください。

おすすめ記事