Ksh
如何清除 ksh 中的鍵盤緩衝區?
我正在編寫一個 Korn shell 腳本,它將讀取使用者的輸入。我想在呼叫“讀取”命令之前清除鍵盤緩衝區,這樣使用者就不會因為不耐煩地提前輸入而引起問題。我可能會補充一點,這個腳本的目標受眾是我自己。🙂
我正在使用 OpenBSD ksh,它似乎是 ksh88 的變體。我確實有 ksh93 可用,但寧願不依賴 Bash。
範常式式碼:
# Would like to clear stdin buffer here echo "Are you sure?" read input case $input in y*|Y*) echo "You said yes!" ;; *) echo "You said no!" exit 1 ;; esac
編輯:基本上我想在呼叫“讀取”之前清除標準輸入中的所有數據。
我目前正在嘗試為 SIGALRM 設置信號處理程序並使用陷阱來實現“預讀”超時。
試試這樣
read -t 1 garbage; echo "Are you sure?" read input case $input in y*|Y*) echo "You said yes!" ;; *) echo "You said no!" exit 1 ;; esac
編輯:我剛剛意識到這只會刪除第一行,你可以把它放在一個循環中:
while read -t 1 garbage; do sleep 0 done echo "Are you sure?" read input case $input in y*|Y*) echo "You said yes!" ;; *) echo "You said no!" exit 1 ;; esac