2011-01-05 4 views
0

작은 Ruby 응용 프로그램에서 캐리지 리턴을 기다리지 않고도 사용자 입력을 받아 들일 수 있습니다. 나의 이해는 터미널이 사용자 입력을 스크립트에 직접 입력하기 위해서는 cbreak 모드를 활성화해야한다는 것이다.Ruby 터미널 응용 프로그램에서 cbreak 모드를 사용하는 방법은 무엇입니까?

단순히 스크립트의 맨 위에 x % [cbreak()]를 실행했지만 작동하지 않았습니다. 과장된 것처럼 보이지만 (n) 저주를 사용하여 동일한 결과를 얻을 수도 있음을 알았습니다.

아무에게도 이것을 구현하는 방법에 대한 제안이 있습니까?

감사

답변

1

하나 개의 솔루션을 체크 아웃 할 수 것은 쉘의 read 명령을 사용하는 것입니다 %x을 통해 Ruby의 STDIN이 책임 져야 할 것처럼 보이기 위해 쉘에 잠깐 담그는 것을 느낄 수는 없지만 간단하고 작동합니다.

#! /usr/bin/ruby 

puts "Please enter your first initial" 

str = %x[read -s -n1 keypress; echo $keypress] 

puts "Your first inital is " + str 
1

cbreak는 저주 함수 호출, 그래서 %x 확실히 (즉, 쉘 명령을 실행하기위한 것입니다)에는 적용되지 않습니다. cbreak은 표준 curses 라이브러리에 정의되어 있으므로 아마도 가장 좋은 방법 일 것입니다.

참조 :
http://ruby-doc.org/stdlib/libdoc/curses/rdoc/classes/Curses.html#M000280

편집은 : 당신은 또한 (I 구현하기 어려운 찾을 수) 저주를 사용하는 것을 피한다 Curses.getch

+0

나는 그것이 bash 명령이라고 생각하여 cbreak를 오해했습니다. 명확히 해 주셔서 감사합니다. – Thomas

관련 문제