我試圖在 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”