두 "읽기" 사이의 키보드 입력 버퍼를 무시하는 방법

두 "읽기" 사이의 키보드 입력 버퍼를 무시하는 방법

이런 스크립트를 실행하면

read -n 1 -p 'Enter first variable: ' var1
if echo "${var1}" | grep -iq "^y"
then
    echo "okay"
else
    echo "not okay"
fi

sleep 2

read -n 1 -p 'Enter second variable: ' var2
if echo "${var2}" | grep -iq "^y"
then
    echo "okay"
else
    echo "not okay"
fi

이 코드를 실행하고 2초 이내에 클릭하면 y버퍼에 저장되고 다음으로 전달되기 때문에 사용자에게 입력을 기다리지 않고 버퍼에 키만 제공합니다. 그렇죠. 여기.nnreadEnter second variable:n

명확하게 하기 위해 다음 질문에서 내 문제를 다른 단어로 설명하지만 질문은 하나일 뿐입니다.

키를 메모리에 버퍼링하는 것을 중지하는 방법은 무엇입니까?또는

버퍼의 두 번째 변수에 대한 사용자 입력을 무시하는 방법var2 ?또는

read첫 번째 입력 후 2초 이내에 무엇을 입력하더라도 read두 번째 입력으로 사용되지 않도록 첫 번째와 두 번째 사이의 키보드 입력을 비활성화/무시하려면 어떻게 해야 합니까?read

답변1

tcflush()보류 중인 입력을 플러시하려면 POSIX 함수를 호출해야 합니다 .

예를 들어:

perl -MPOSIX -e 'tcflush 0,0'

답변2

셸을 사용하는 경우 bash시간 제한이 거의 0인 입력에서 단일 문자를 읽을 수 있는 간단한 방법이 있습니다. 읽은 내용이 있으면 true를 반환하므로 다시 시도해야 합니다. 예를 들어, 이 함수를 스크립트 시작 부분에 놓고 절전 모드와 다음 읽기 사이에 호출하세요.

flush(){
  while read -N 1 -t 0.01
  do :
  done
}

관련 정보