Bash

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

  • June 25, 2016

我正在嘗試在 shell 腳本中擷取按鍵(例如使用read)而不是回顯它。我發現的三種方法是stty -echo-s切換和流重定向。

但是,在似乎使用 FreeBSD 實現的 macOS 上,這些都不能始終如一地工作。

以下腳本顯示了該問題:

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

同時按下向上和向下箭頭時,有時命令會回顯A^[[BB^[[A。當機器執行緩慢(由於電池電量不足)時,這種情況尤其常見,這表明存在某種競爭狀況。

我錯過了什麼嗎?否則,我該如何解決這個問題?

在您的循環中,在循環結束的“stty echo”和下一次迭代的“stty -echo”之間有一個很短的時間視窗。在此視窗期間接收到的鍵盤輸入將被回顯,即使沒有讀取命令在等待它。如果你不想要迴聲,就不要叫“stty echo”😉

引用自:https://unix.stackexchange.com/questions/292064