스크립트 끝에서 자동 기대가 중단됩니다.

스크립트 끝에서 자동 기대가 중단됩니다.

자동 기대 스크립트가 있습니다. 수정했는데 잘 작동하지만 실행이 끝나면 작동이 중단되고 터미널을 가져오려면 Ctrl+C를 눌러야 합니다.

[..]
887VA#logout
Connection to 10.255.255.1 closed by remote host.
Connection to 10.255.255.1 closed.
root@blackbox:/etc/myscripts#

^Croot@blackbox:/etc/myscripts# ^C
root@blackbox:/etc/myscripts#

위의 빈 공간에 Enter 키를 여러 번 눌렀습니다.

암호

#!/usr/bin/expect -f

set force_conservative 0  ;# set to 1 to force conservative mode even if
                          ;# script wasn't run conservatively originally
if {$force_conservative} {
        set send_slow {1 .1}
        proc send {ignore arg} {
                sleep .1
                exp_send -s -- $arg
        }
}

set timeout -1
spawn $env(SHELL)
match_max 100000


send -- "ssh [email protected]\r"
expect -exact "Password: "
send -- "passwordhere!!!\r"
expect -exact "887VA#"
send -- "show interface vlan 2\r"
expect -exact "Vlan2 is up, line protocol is up \r"
send -- "logout\r"
expect eof

답변1

셸을 생성하고, ssh 명령을 보내고, 일부 작업을 수행한 다음 ssh 세션에서 로그아웃합니다.쉘을 종료하지 마십시오.

나는 일반적으로 쉘을 생성하지 않고 실제로 내가 원하는 것을 생성하도록 자동으로 예상되는 스크립트를 편집합니다.

짧게 재작성:

#!/usr/bin/expect -f
# default timeout is 10 seconds
spawn ssh [email protected]
expect -exact "Password: "
send -- "passwordhere!!!\r"
expect -exact "887VA#"
send -- "show interface vlan 2\r"
expect -exact "Vlan2 is up, line protocol is up \r"
send -- "logout\r"
expect eof

스크립트의 논리에 관하여: 라인 프로토콜이 다음과 같은 경우 어떻게 해야 합니까?아니요위로?

관련 정보