Expect 명령을 사용하여 JBOSS 설치 프로그램 매개변수를 자동으로 전달하세요.

Expect 명령을 사용하여 JBOSS 설치 프로그램 매개변수를 자동으로 전달하세요.

수동으로 실행할 때 입력을 요청하는 JBOSS 설치 프로그램이 있습니다. 다음은 아래와 같은 실행 예입니다.

[sp@sp baseInstaller]$ ./advStart.sh config
Buildfile: /home/sp/jboss/sp/baseInstaller/build.xml

init:

config:
   [groovy] coa.install.props properties
   [groovy]
   [groovy]   ? indicates a response is required from you
   [groovy]   [value] is the current value
   [groovy]        to keep current value just press <enter>
   [groovy]        or type new value and press <enter>
   [groovy]   {value,value..} shows the allowed values
   [groovy] installer version 6.0.3.4
   [groovy]
   [groovy] Jboss Server Config Options (changeable after initial config)
   [groovy] -------------------------------------------------------------
   [groovy] ? host                        [sp.resource.com]
resource.com
   [groovy]     ip=10.50.55.90
   [groovy]   host changed to resource.com
   [groovy] ? bind to host only or all ports (all has security implications)
   [groovy]                               [host]
   [groovy]                                                  {host,all,custom}
all
   [groovy]   bind to host only or all ports (all has security implications) changed to all
   [groovy] ? min memory                  [64]
64

이 프로세스를 자동화하기 위해 예상 스크립트를 작성해 보았습니다. 아래는 내 스크립트입니다.

[sp@sp baseInstaller]$ cat saba.sh
#!/usr/bin/expect


# Accessing command line arguments
set arg1 [lindex $argv 0]
set arg2 [lindex $argv 1]

# Printing the arguments
puts "Argument 1: $arg1"
puts "Argument 2: $arg2"

cd /home/sp/jboss/sp/baseInstaller
spawn ./advStart.sh config

# Expect the prompt for the argument with a timeout of 10 seconds
expect {
        "? host                        [sp.resource.com]" {
        # Send the host value
        send "$arg1\r"
        exp_continue
        }
    "? bind to host only or all ports (all has security implications)" {
        # Send the argument value
        send "$arg2\r"
    }
    timeout {
        puts "Error: Timed out while waiting for the prompt."
        exit 1
    }
    eof
} -timeout 10

# Wait for the script to finish
wait

이제 이 스크립트를 실행할 때 아래에 도달하고 더 이상 진행되지 않습니다. 이 문제를 해결하는 데 도움을 주실 수 있나요?

[sp@sp baseInstaller]$ expect saba.sh resource.com all
Argument 1: resource.com
Argument 2: all
spawn ./advStart.sh config
Buildfile: /home/sp/jboss/sp/baseInstaller/build.xml

init:

config:
   [groovy] coa.install.props properties
   [groovy]
   [groovy]   ? indicates a response is required from you
   [groovy]   [value] is the current value
   [groovy]        to keep current value just press <enter>
   [groovy]        or type new value and press <enter>
   [groovy]   {value,value..} shows the allowed values

답변1

expect사용되는 양식에 대해 매우 엄격하십시오 {}. -timeout 10끝에 내용을 추가 하면 {}더 이상 여러 줄 {}형식을 인식하지 못하고 일치하는 패턴을 잘못 해석합니다. debug (option) 을 사용하여 스크립트를 실행하면 이를 확인할 수 있습니다 -d.

다음의 간단한 예를 생각해 보세요.

expect {
  "abc" exit 1
} -timeout 10

디버그가 표시됩니다

expect: does "" (spawn_id exp4) match glob pattern "\n  "abc" exit 1\n"? no
"10"? no

보시다시피 패턴은 "{"와 "}" 사이의 모든 것으로 간주되며 "-timeout"은 일치할 때 실행되는 명령으로 간주됩니다. "10"은 일치시킬 다음 패턴입니다.

"? host [sp.resource.com]"또한 패턴은 기본적으로 "glob"으로 가정되고 [문자 세트로 시작하는 특수 문자의 경우에도 마찬가지이므로 패턴이 일치하지 않습니다. -ex의미하는 패턴 앞에 접두어를 붙여야 합니다.완전히 적합구함. 공백이 데이터와 정확하게 일치하는지 확인하세요.

관련 정보