Я пытаюсь создать ожидаемый скрипт для выполнения и команду scp для копирования данного файла на удаленную машину. Если я запускаю следующий сценарий, команда scp завершается неудачно.
#!/usr/bin/expect -f
set ip_addr [lindex $argv 0]
set in_fname [lindex $argv 1]
set out_fname [lindex $argv 2]
set user [lindex $argv 3]
set password [lindex $argv 4]
set timeout 2
if {[llength $argv] != 5} {
send_user "Usage: ./scp_copy.sh <ip_address> <in_fname> <out_fname> <user> <password>\n"
exit 1
}
spawn scp $in_fname $user@$ip_addr:$out_fname
expect {
(yes/no) {send "yes\r"}
timeout
}
expect {
timeout
{
send_user "FAILED TO PERFORM SCP CMD.\n";
exit 1
}
password:
{
send "$password\r"
}
eof
}
... однако, если я удалю 'eof' в конце второго предложения ожидающего и вместо этого создам новое предложение ожидаемого вНаконец, команда scp работает.
expect eof
Пожалуйста, кто-нибудь может объяснить это. Я совершенно новичок в ожидании (и bash) сценариев и был бы благодарен за простое объяснение, которое помогает мне понять.
Что именно ожидает от eof? Указывает ли eof, что порожденный процесс завершен? Если да, должен ли я ввести другой тайм-аут, например
expect {
timeout { exit }
eof
}
В чем разница между eof, находящимся внутри второго предложения ожидаемого, и его собственным отдельным предложением ожидания? Я ожидал того же эффекта.
Нужно ли вызывать 'close' в конце сценария ожидаемого?
Спасибо.