2016-09-22 3 views
-2

У меня есть программа скриптов, которая использует Bash с Expect. Этот сценарий оболочки выполняет загрузку SFTP.SFTP Upload с помощью Bash

Вот сценарий.

#!/usr/bin/expect -f 

/usr/bin/expect << EOD 
spawn sftp [email protected] 
#expect "*Are you sure you want to continue connecting*" {send "yes\r" } 
expect "Password:*" 
send $pwd\r 
expect "sftp> " 
send "lcd $locdirectory\r" 
expect "sftp> " 
send "cd $remDirect\r" 
expect "sftp> " 
send "put $file\r" 
expect "sftp> " 
send "bye\r" 
expect EOD 

При запуске этого скрипта он будет бесконечным циклом после утверждения bye.

Он сохраняет печать «Y» на терминале и никогда не кончается.

Пожалуйста, объясните, почему это происходит.

+0

Рассматривались ли вы с использованием клиента, разработанного, документально подтвержденного и поддерживаемого для автоматического использования, такого как 'lftp'? (Да, он поддерживает sftp). Использование 'ожидать' для сценария программы, не предназначенной для автоматизации, имеет гораздо более высокий риск изменения будущих версий в способах, нарушающих ваш скрипт. –

+0

Кроме того, это ** только **, используя ожидание, а не bash вообще. –

+0

@CharlesDuffy - 'ожидать << EOD' - это синтаксис оболочки. :) – pynexj

ответ

0

Если вы используете #!/usr/bin/expect, то вы не имеете Баш скрипт: удалить строку

/usr/bin/expect << EOD 

, а затем принять @ совет whjm в

Кроме того, путь к условно ожидать " Продолжать?" is

expect { 
    "*Are you sure you want to continue connecting*" { 
     send "yes\r" 
     exp_continue 
    } 
    "Password:*" {send $pwd\r} 
} 
+0

Спасибо, Гленн. У меня очень ограниченные знания по сценариям. Спасибо за ваше предложение. –

0

Я был в состоянии работать с этой проблемой. Мне пришлось раскомментировать строку из сценария.

#expect "*Are you sure you want to continue connecting*" {send "yes\r" } 

Мой сервер не имел ключ сервера назначения, поэтому вместо того, чтобы запрос пароля было запрашивая "Вы уверены, что хотите продолжить подключение? и в этом не было ничего подходящего.