쉘에서 Expect를 작성하는 방법

쉘에서 Expect를 작성하는 방법

이것은 이전 질문에 대한 연속입니다.생성 명령을 찾을 수 없습니다.

이전 게시물 몇 개를 참조한 후 해당 명령을 작성했습니다. 잘못된 경우 SSH를 원격 서버로 실행하고 일부 명령을 실행할 수 있는 방법은 무엇입니까?

답변1

한 가지 가능성은 다음과 같습니다. Expect-syntax 파일을 만들고 쉘 스크립트를 통해 호출합니다.

 #!/bin/bash
 expect -f my-file.exp $1 # parameter 1 is the server name

my-file.exp에는 다음 명령만 예상됩니다.

spawn ssh "username@[lindex $argv 0]"  # param 1 : server name
                                # expect now reads the input and does what you tell it on certain patterns

expect { 
  "password:" { send "my-password\r"; send "do_this_command\r"; send "do_that_command\r"; exp_continue; }
  "done" { send_user "exiting"; }
}

이 예에서는 일반 텍스트 비밀번호를 보내는 서버에 로그온한 다음 몇 가지 명령을 보내고 계속합니다.

입력에서 "완료"라고 읽으면 종료되고, 그렇지 않으면 몇 초 후에 시간 초과됩니다.

"exp_continue"를 수행하는 한 이는 예상 {} 루프 내부에 머물면서 입력을 일치시키고 적절한 출력을 수행합니다.

답변2

쉘스크립트에서 Expect Shebang을 사용하고 Expect 스크립트를 작성할 수도 있습니다.

#!/usr/bin/expect -f 
spawn ssh localhost 
expect "password: " 
send "password\r" 
expect "{[#>$]}"         #expect several prompts, like #,$ and >
send -- "command.sh\r"
expect "result of command"
etc...

관련 정보