값을 입력한 후 스크립트가 계속될 것으로 예상됩니다.

값을 입력한 후 스크립트가 계속될 것으로 예상됩니다.

나는 다음과 같은 예상 스크립트를 작성했습니다.

#!/usr/bin/expect -f
set timeout 10
spawn zypper in --no-recommends pdns
expect {
  -re {^.* Solution (\d): (?:break pdns)} {
    set solution "$expect_out(1,string)"
    exp_continue
  }
  "Choose from above solutions by number or cancel" {
   puts "$solution"
   send "\r"
  }
}

프로그램은 $solution내 위치를 올바르게 배치했지만(아래 예에서는 "3"이 올바르게 배치됨) 실행을 중단하고 캐리지 리턴을 보내는 것처럼 보이지만 생성 중인 zypper 명령이 계속되도록 허용하지 않습니다.

suse-test-647578bd8-95qsc:/ # ./install-pdns.expect 
spawn zypper in --no-recommends pdns
Refreshing service 'container-suseconnect-zypp'.
Problem retrieving the repository index file for service 'container-suseconnect-zypp':
[container-suseconnect-zypp|file:/usr/lib/zypp/plugins/services/container-suseconnect-zypp] 
Warning: Skipping service 'container-suseconnect-zypp' because of the above error.
Loading repository data...
Reading installed packages...
Resolving package dependencies...

Problem: the to be installed pdns-4.6.2-lp154.186.32.x86_64 requires 'systemd', but this requirement cannot be provided
  not installable providers: systemd-249.11-150400.6.8.x86_64[SLE_BCI]
 Solution 1: Following actions will be done:
  remove lock to allow installation of systemd-249.11-150400.6.8.x86_64[SLE_BCI]
  remove lock to allow installation of systemd-default-settings-branding-SLE-0.7-3.2.1.noarch[SLE_BCI]
  remove lock to allow installation of systemd-presets-branding-SLE-15.1-20.8.1.noarch[SLE_BCI]
  remove lock to allow installation of systemd-default-settings-0.7-3.2.1.noarch[SLE_BCI]
  remove lock to allow installation of systemd-presets-common-SUSE-15-150100.8.12.1.noarch[SLE_BCI]
 Solution 2: do not install pdns-4.6.2-lp154.186.32.x86_64
 Solution 3: break pdns-4.6.2-lp154.186.32.x86_64 by ignoring some of its dependencies

Choose from above solutions by number or cancel [1/2/3/c/d/?] (c): 3

suse-test-647578bd8-95qsc:/ #

분리된 puts및 to를 send결합하려고 시도했지만 puts "$solution\r"값을 입력하지 않고 중단됩니다.

추가해 보았습니다

eof { exp_continue }
"Installing:" { exp_continue }
eof {}

이웃 에 관심을 갖고 기존 이웃 너머를 expect보려고 노력하십시오 . 둘 다 주문이 진행되는 것 같지 않습니다 .eofexpectzypper

명확히 하려면: 수동으로 수행할 경우 zypper"3"이 필요하고 "Enter"를 누른 다음 패키지 설치를 계속합니다(따라서 "설치:"를 기다리십시오).

시도해 볼 다른 사항에 대한 제안을 주시면 감사하겠습니다!

읽어 주셔서 감사합니다!

답변1

@meuth의 제안을 사용하고 다음을 수행하십시오 exp_continue.

#!/usr/bin/expect -f
set timeout 10
spawn zypper in --no-recommends pdns
expect {
  -re {^.* Solution (\d): (?:break pdns)} {
    set solution "$expect_out(1,string)"
    exp_continue
  }
  "Choose from above solutions by number or cancel" {
   send "$solution\r"
   exp_continue
  }
  eof {}
}

관련 정보