Bash

默默地逐個字元地讀取是行不通的

  • December 3, 2014

我正在嘗試按字元讀取使用者輸入字元,如下所示:

而[1];**讀 -s -N** 1

...
完畢

雖然這個循環使用 VNC ( ) 可以完美xterm執行,但它只能部分使用 putty (xterm) 或 Linux 終端,以及大多數其他文本終端。

當我對鍵盤變得“狂野”並同時敲擊多個鍵時遇到了問題,並且儘管使用了 -s 模式,但某些鍵仍會回顯

我也嘗試過重定向輸出和stty -echo. 雖然第一個沒有任何區別,但後者會有所幫助,最大限度地減少“迴聲”的頻率,但並不完美。

有任何想法嗎?

read -s``echo僅在該read命令執行期間禁用終端。因此,如果您在兩個read命令之間鍵入一些內容,終端驅動程序會將echo其返回。

您應該禁用echo然後read在沒有以下情況下呼叫循環-s

if [ -t 0 ]; then
 saved=$(stty -g)
 stty -echo
fi
while read -rN1; do
 ...
done
if [ -t 0 ]; then
 stty "$saved"
fi

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