如何抑制錯誤讀取功能的迴聲

如何抑制錯誤讀取功能的迴聲

我試圖在 shell 腳本中捕獲按鍵(例如使用read)而不是回顯它。我發現的三種方法是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”

相關內容