Bash
如何抑制錯誤讀取功能的迴聲
我正在嘗試在 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
。當機器執行緩慢(由於電池電量不足)時,這種情況尤其常見,這表明存在某種競爭狀況。我錯過了什麼嗎?否則,我該如何解決這個問題?
在您的循環中,在循環結束的“stty echo”和下一次迭代的“stty -echo”之間有一個很短的時間視窗。在此視窗期間接收到的鍵盤輸入將被回顯,即使沒有讀取命令在等待它。如果你不想要迴聲,就不要叫“stty echo”😉