오류 읽기 기능의 에코를 억제하는 방법

오류 읽기 기능의 에코를 억제하는 방법

쉘 스크립트에서 키 입력을 캡처하려고 합니다(예 read: 내가 찾은 세 가지 방법은 stty -echo스위치 -s및 스트림 리디렉션입니다.

그러나 FreeBSD를 사용하여 구현된 것으로 보이는 macOS에서는 이 중 어느 것도 일관되게 작동하지 않습니다.

다음 스크립트는 문제를 보여줍니다.

while true; do
    stty -echo
    read -s -n 1 CHAR &>/dev/null
    stty echo
done

위쪽 및 아래쪽 화살표를 동시에 누르면 때때로 명령이 에코 A^[[B되거나 B^[[A. 이는 특히 기계가 느리고(배터리 부족으로 인해) 일종의 경쟁 상태를 나타낼 때 흔히 발생합니다.

내가 뭐 놓친 거 없니? 그렇지 않으면 이 문제를 어떻게 해결할 수 있습니까?

답변1

루프에는 루프 끝의 "stty echo"와 다음 반복의 "stty -echo" 사이에 짧은 시간 간격이 있습니다. 이 창에서 수신된 키보드 입력은 대기 중인 읽기 명령이 없더라도 에코됩니다. 에코를 원하지 않으면 "stty echo"를 호출하지 마세요.

관련 정보