[완료]perl 스크립트중 expect 질문 입니다.

sasimi2001의 이미지

인터넷 돌아다니다가 ssh 자동 로그인 perl 스크립트가 있길레

그거 수정해서 패스워드 변경 스크립트 작성할려고 하는데 막히네요.ㅠㅠ

============================================================================
#1 $exp->expect($timeout,
#2 [qr '[?] $' => \&inputyes],
#3 [qr 'password: $' => \&inputpw],
#4 [qr '[#>\$] $' => \&inputpasswd],
#5 [qr 'New UNIX password: $' => \&inputpasswd2],
#6 [qr 'Retype new UNIX password: $' => \&inputpasswd3],
#7 [timeout => \&timeouterr],);
============================================================================

다른 부분은 생략하고

#3 이 ssh 로그인 패스워드 넣는 부분이구요
#4 까지 진행되면 passwd test 실행되서
#5, #6 이렇게 넘어갈줄 알았는데

#5 의 문장끝 password; 부분이랑 #3 의 password; 부분이 중복되면서

#5,6 으로 넘어가지 않고 계속 #3 부분에서 루프가 돕니다.

이부분 제 프로그래밍 지식으로 처리를 못해서 KLDP 지식인님들의 도움을 받고자 합니다.^^

irondog의 이미지

함수의 프로토 타입이 다음과 같더군요.
$object->expect($timeout, @match_patterns)

#3의 qr'password'가 아래 #5, #6의 문장도 만족 시키니까 반복 되는 것 같습니다.
그러므로 맨 앞에 ^를 붙이거나 \n등을 넣어서 문제를 해결 할 수 있지 않을까요?

#3 [qr/^password: $/ => \&inputpw],
#4 [qr '[#>\$] $' => \&inputpasswd],
#5 [qr/^New UNIX password: $/ => \&inputpasswd2],
#6 [qr/^Retype new UNIX password: $/ => \&inputpasswd3],

sasimi2001의 이미지

"^" 의 의미가 그 줄 첫 문자열을 뜻하는게 맞나요?

ssh 로그인 할때
root@10.10.10.10's password: (or root@test's password: )
이런 식이기 때문에 password: 는 맨 마지막 문자열 이라서요.

그리고 ^ 부분을 사용한곳에서는 ' 대신에 / 로 묶어주었는데 두개의 차이가 무엇인가요?

아 그리고 하나더요..;;

password: $ => 이 부분에서 $의 의미도 궁금하네요..ㅜㅜ

irondog의 이미지

''나 ??나 //에 대한 내용은 http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators를 참조하세요.

$는 ^와 비교 될 수 있는데 줄의 마지막과 매치를 의미 합니다.

#3 [qr '[^U][^N][^I][^X] password: $' => \&inputpw],
#4 [qr '[#>\$] $' => \&inputpasswd],
#5 [qr 'New UNIX password: $' => \&inputpasswd2],
#6 [qr 'Retype new UNIX password: $' => \&inputpasswd3],

#3이 앞에 UNIX가 붙지 않은 경우를 매치로 하던지
아니면
#3 [qr /'s password: $/ => \&inputpw],

하시면 되지 싶네요.

sasimi2001의 이미지

좋은 사이트 알려줘서 감사하구요.

이제 나머지는 이해는 확실히 안가지면 연구해 봐야겠네요.ㅎㅎ

즐거운 하루 되세요!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.