다음 스크립트를 사용하여 Alpine Linux 설치를 자동화하려고 합니다.
expect <<- EOF
set timeout -1
spawn setup-disk -e -m sys /dev/sda
expect {
{WARNING: Erase the above disk(s) and continue? (y/n) \[n\] } {
send "y\r"
exp_continue
}
"Enter passphrase for /dev/sda3: " {
send -- "helloworld\r"
exp_continue
}
"Verify passphrase: " {
send -- "helloworld\r"
exp_continue
}
}
expect eof
EOF
문제는 스크립트가 두 번째 프롬프트에 도달할 때마다 비밀번호를 전송하지만 더 이상 계속할 수 없고 다음 프롬프트를 표시하지 않고 정지된다는 것입니다.
답변1
"비밀번호 확인" 이후에 더 이상 상호 작용이 없다고 가정하고 몇 가지 작은 변경을 수행합니다.
expect <<- EOF
set timeout -1
spawn setup-disk -e -m sys /dev/sda
expect {
{WARNING: Erase the above disk(s) and continue? (y/n) \[n\] } {
send "y\r"
exp_continue
}
"Enter passphrase for /dev/sda3: " {
send -- "helloworld\r"
exp_continue
}
"Verify passphrase: " {
send -- "helloworld\r"
# removing `exp_continue`
# the `expect` command then ends here
}
}
# not `expect eof`, but
interact
EOF
이제 생성된 프로그램이 무엇을 하는지 볼 수 있을 것입니다.