2013-02-03 1 views
3

다음 스크립트는 문서의 개요 섹션에있는 샘플과 거의 같습니다.Term :: ReadLine을 사용하여 명령 기록을 검색하는 방법은 무엇입니까?

use strict; 
use warnings; 
use Term::ReadLine; 

my $term = Term::ReadLine->new('My shell'); 
print $term, "\n"; 
my $prompt = "-> "; 

while (defined ($_ = $term->readline($prompt))) { 
    print $_, "\n"; 
    $term->addhistory($_); 
} 

그것은 오류없이 실행하지만 불행하게도, 내가 위쪽 화살표를 클릭해도, 난 단지 ^[[A없이 역사를 얻을. 내가 뭘 놓치고 있니?

print $term 문은 Term::ReadLine::Stub=ARRAY(0x223d2b8)을 인쇄합니다.

우리가 여기에 있기 때문에 나는 밑줄 친 프롬프트를 인쇄하는 것을 보았다. 그러나 그것을 막을 수있는 것은 문서에서 찾을 수 없다. 그것을 피할 수있는 방법이 있습니까?

+0

을 다음과 같이 스크립트의

내 재 작성이다. 터미널 키 바인딩을 확인 했습니까? – Rob

+1

@Rob, 어떤 Term :: ReadLine 구현을 사용하고 있습니까? 그것은 Term :: ReadLine :: Gnu를 설치 한 후에도 저에게 효과적이었습니다.하지만 스텁 (Stub)에서도 작동해야한다고 생각합니다. – Zagorax

답변

5

기본 질문에 대답하려면 아마도 Term :: ReadLine 라이브러리가 설치되어 있지 않은 것일 것입니다. 'perl-Term-ReadLine-Perl'또는 'perl-Term-ReadLine-Gnu'가 필요할 것입니다. 이것들은 페도라 패키지 이름이지만 우분투/debian 이름은 비슷할 것이라고 확신합니다. CPAN에서 가져올 수도 있다고 생각하지만, 아직 테스트하지 않았습니다. 패키지를 설치하지 않았다면, perl은 기능이 거의없는 더미 모듈을로드합니다. 이런 이유로 역사는 그것의 일부가 아니 었습니다.

밑줄은 readline이 장식품을 호출하는 부분입니다. 완전히 끄려면, $term->ornaments(0);을 apropriate 어딘가에 추가하십시오. 그것은 나 (데비안에 펄 5.10) 작동

#!/usr/bin/perl 
use strict; 
use warnings; 

use Term::ReadLine; # make sure you have the gnu or perl implementation of readline isntalled 
# eg: Term::ReadLine::Gnu or Term::ReadLine::Perl 
my $term = Term::ReadLine->new('My shell'); 
my $prompt = "-> "; 
$term->ornaments(0); # disable ornaments. 

while (defined ($_ = $term->readline($prompt))) { 
    print $_, "\n"; 
    $term->addhistory($_); 
} 
+0

@Zagorax @ Zagorax는 답변을 선택하거나 자신의 것을 제출 하시겠습니까? – Mobius

+0

참고 : 장식 (0)이 작동하지 않았습니다. BEGIN {} 블록에서 $ ENV {PERL_RL} = "o = 0"으로 설정했습니다. 이상하게도 –

관련 문제