2011-08-10 5 views
1

이전에는 원격 쉘 조작을 자동화하기 위해 plink (PuTTY)와 함께 Tk/Expect를 사용했습니다. 그러나 다른 쉘에 다른 프롬프트가 있거나 프롬프트가 아닌 쉘 출력 (!)에 프롬프트 문자가 나타나는 경우 Expect가 실패하는 경우가 있습니다.원격 tty가 입력 대기 중인지 확인하는 방법은 무엇입니까?

원격 쉘이 입력을 기다리고 있는지 여부를 알고 싶습니다. plink 또는 일부 제 3 자 라이브러리를 통해 필자는 필요한 경우 소켓 레이어에서 프로그래밍을 마쳤습니다.

답변

2

아니요, 작업중인 레벨에서 쉘 프롬프트를 안정적으로 감지 할 수있는 방법이 없습니다. 일부 다른 옵션이 될 수 있습니다

  • 항상 인식 가능한 출력을 인쇄 할 명령을 실행할 때 완전한 - 예컨대, doSomething ; echo uniqueStringThatMeansThatWeAreDone - 그 문자열을 검색합니다.
  • 자동 스크립트가 로그인 할 때 인식 할 수있는 프롬프트를 설정하십시오. 사용중인 쉘을 모르면 그냥 exec을 입력하십시오.
  • 쉘을 스크립팅하지 않고 직접 명령을 실행할 수있는 SSH 라이브러리를 사용하십시오. 나는 티클에서 사용할 수있는 무엇에 익숙하지 해요,하지만 펄은 당신이 좋아하는 일을 할 수있게된다 Net::SSH::Perl있다 : 당신의 대답에 대한

    my $ssh = Net::SSH::Perl->new("remotehost"); 
    $ssh->login("user", "pass"); 
    my $output = $ssh->cmd("doSomething"); 
    
+0

감사합니다. Net :: SSH :: Perl이 구현 된 방법을 연구 할 예정입니다. 바퀴를 다시 만들지는 않겠지 만 관심있는 지식입니다. –

+0

Net :: SSH :: Perl을 다시 만들지 않으실 것입니다. 자신 - 이것은 Perl에서 SSH 클라이언트를 합리적으로 완벽하게 구현 한 것입니다. 쉬운 일이 아닙니다. :) – duskwuff

+0

프롬프트를 새로운 UUID로 설정하십시오. 우연히 다른 쪽에서 자르기의 가능성은 우스꽝스럽게 아주 작습니다. –