IF 문을 사용하여 Expect에서 분기 만들기

IF 문을 사용하여 Expect에서 분기 만들기

과도한 프롬프트를 처리하기 위한 스크립트 를 작성 중입니다 expect.

bash내가 사용하는 스크립트는 다음 두 가지 순서 중 하나를 따를 수 있습니다.

  1. prompt1 -> prompt2 -> prompt3
  2. prompt1 -> prompt3

즉, 때로는 이해가 되지 않을 때도 있습니다 prompt2. 그래서 내 질문은 다음과 같습니다. expect확인 prompt2하고 존재하는 경우 a를 보내고 y계속 진행하는 스크립트 를 어떻게 작성할 수 있습니까 ? 그렇지 않으면 계속됩니다.

편집: @glenn의 의견과 답변에 감사드립니다! 나중에 다른 사람들에게 도움이 될 수 있도록 질문을 더 명확하게 만들려고 노력하겠습니다. 제가 작업 중인 특정 스크립트는 bash서버에서 일부 데이터를 다운로드하는 것입니다. 일반적으로 스크립트를 실행하면 다음과 같은 일이 발생합니다.

Do you want to download data from *server name*?
y
Do you want to download data from *some directory within server*?
y
...

하지만 가끔 이 스크립트를 실행할 때 아직 서버에 연결되지 않은 경우가 있습니다. 그래서 서버에 연결되어 있는지 확인하는 부분을 스크립트에 포함시켰습니다. 그렇지 않으면 다음과 같은 또 다른 메시지가 표시됩니다.

Do you want to download data from *server name*?
y
Looks like you are not connected to *server name*! Want to connect now?
y
Do you want to download data from *some directory within server*?
y
...

답변1

나는 이것이 당신이 원하는 것이라고 생각합니다: expectwait 명령누구나"팁 2"또는"팁 3"

expect "prompt1"
send "answer to prompt1\n"
expect {
    "prompt2" {send "y\n"; exp_continue}
    "prompt3"
}
send "answer to prompt3\r"

exp_continue기본적으로 루프입니다. 이 Expect 명령을 유지하면서 나열된 패턴을 계속 찾으세요.

"prompt3"에는 해당 작업이 없으므로 예상 명령이 종료됩니다.

관련 정보