Выполнение команды scp из ожидаемого скрипта - использование eof - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь создать ожидаемый скрипт для выполнения и команду 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' в конце сценария ожидаемого?

Спасибо.

...