[Shell Script 4] 사용자 키 입력을 받기 ( Enter 없이)

 사용자 키 입력을 받기


이 스크립트는 사용자에게 Yes/No를 물어서 입력된 문자로 Yes인지 No 인지 판단해서 메세지를 표시 하며 그외의 경우에는 What? 이라는 메세지를 출력합니다 . 





























read 명령어는 반드시 줄바꿈이 필요합니다 . (엔터를 눌러야합니다 . )
이럴 때는 터미널의 단말 상태를 처리하는 stty 명령어를 사용하여 터미널을 raw모드로 설정하면 키 버퍼 처리를 하지 않아 문자마다 처리 할 수 있습니다. 


  •  1) 줄바꿈이 없는 메세지를 echo -n으로 표시 후 현재 터미널 설정을 stty -g 명령어 출력결과를 가지고 저장합니다 . stty -g 출력은 다음과같으며 현재 터미널 설정이 저장 됩니다 . 




- 현재 터미널 설정을 표시 
# stty -g 

  • 2)에서는 stty raw 명령어로 터미널을 raw 모드로 전환합니다 . / 실제 키 입력 값은 dd 명령어에 직접 전달 됩니다 
  • 3)의 dd 명령어에서는 입출력 블록 크기를 1(bs=1) , 입력에서 출력으로 복사하는 블록 수를 1( count=1) 로 해서 입력된 문자를 문자열 변수 (char)에 저장합니다 . 또한, dd 명령어 실행 메세지는 필요 없으므로 /dev/null 로 리다이렉트해서 버립니다 . 
  • 4)에 서 stty 명령어를 사용하여 $tty_state 으로 지정 하면 사용자 터미널 상태는 raw 모드를 벗어나여 처음 저장한 터미널 상태로 돌아갑니다 . 
  • 5) 에서 case 분기합니다 . 


결과
결과는 올바르게 출력 되나 stty -g에 기본 설정 오류가 있는 것 같습니다 .