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