이런 스크립트를 실행하면
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버퍼에 저장되고 다음으로 전달되기 때문에 사용자에게 입력을 기다리지 않고 버퍼에 키만 제공합니다. 그렇죠. 여기.nnread
Enter 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
}