버그가 있는 읽기 기능의 에코를 억제하는 방법

버그가 있는 읽기 기능의 에코를 억제하는 방법

쉘 스크립트(예: 사용)에서 키 누르기를 캡처하고 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"를 호출하지 마세요.

관련 정보