Ksh

如何清除 ksh 中的鍵盤緩衝區?

  • September 7, 2017

我正在編寫一個 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

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