파일에서 예상되는 스크립트 명령 읽기 [닫기]

파일에서 예상되는 스크립트 명령 읽기 [닫기]

여러 게이트웨이의 구성을 업데이트해야 합니다... 파일이 두 개 있습니다.

파일 1( ip.txt): 게이트웨이의 IP 주소를 저장합니다. ---> 이 파일은 매달 업데이트됩니다.

파일 2( cmd.txt): 게이트웨이의 구성 변경을 위한 명령을 저장합니다. ---> 이 역시 수시로 업데이트됩니다.

지금까지 스크립트가 2개 있는데...

스크립트 1 즉 script1.sh: 기본적으로 script1은 게이트웨이 IP를 읽고 이를 전달하여 스크립트가 게이트웨이에 로그인할 것으로 예상합니다.

#!/bin/sh
for device in `cat /home/ip.txt`;do
./step_3 $device;
done

두 번째 스크립트

#!/bin/expect -f

set IP [lindex $argv 0]

spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@$IP

expect "password: "

send "difficult123\r"

expect "GBU_0:"

send "su -\r"
expect "Password: "

send "verydifficult123\r"

expect "GBI_0:"

send "/17.1/bin/cli.exe\r"

expect "USERNAME : "

send "GOOR\r"

expect "PASSWORD : "

send "DIFFICULT123\r"

expect "] "
****************** POINT 1 - Only One Change command shown -- I have multiple commands here to insert-----

send "CHG-MEM:SEV=CRITICAL;\r"

expect "(Y/N) :"

send "Y\r"

expect "]"
******************** POINT 2

send "exit\r"

expect "0:~> "

send "exit\r"

expect "logout"

send "exit\r"

expect "closed"

expect eof

포인트 1과 2에 기대 명령을 하드코딩하면 모든 것이 매력처럼 작동합니다(여러 명령이 있습니다)... 파일에서 포인트 1과 2에 기대 명령을 어떻게 호출합니까? 사용자가 스크립트를 건드리지 않고 명령 파일을 업데이트하고 실행할 수 있도록 내부에 명령을 하드코딩하지 않고 별도의 파일에 저장하고 싶습니다... 원하는 스크립트 효과에 IP를 전달합니다. 좋습니다... 잘 모르겠습니다 파일에서도 예상되는 명령을 전달할 수 있는 경우.

답변1

TCL은 다른 파일의 명령을 쉽게 포함하고 실행할 수 있습니다.source(n)예를 들어 명령을 사용하면 다음과 같이 말할 수 있습니다.

#!/usr/bin/env expect

package require Tcl 8.5

set IP [lindex $argv 0]
set include_file [lindex $argv 1]

# ... begin commands before here

catch {source $include_file} result options
if {[dict get $options -code] != 0} {
    puts stderr "could not source $include_file: $result"
    exit 1
}

# end commands after here ...

runner포함 파일을 가지려면 하나로 저장하십시오.

$ cat runthese 
puts a
puts b
puts c
$ expect runner 127.0.0.1 runthese
a
b
c
$ 

물론, runthese포함할 파일이나 임의의 파일을 send원하는 경우 갖도록 변경할 수 있습니다.expect

관련 정보