В вашем случае spawn
, скорее всего, является командой ожидаемого языка сценариев, который позволяет автоматизировать интерактивные программные операции. В таком случае spawn
запускает внешнюю команду из ожидаемого скрипта. В вашем примере скрипта отсутствует последовательность shebang (первая строка начинается с #!
) указывает expect
интерпретатор и как таковой не будет интерпретироваться ожидаемым при непосредственном выполнении.
Проверка подлинности пароля с помощью sftp ограничена интерактивным режимом. Для управления sftp в интерактивном режиме вы можете использовать, например, следующий сценарий ожидаемых данных:
#!/usr/bin/env expect
set timeout 20 # max. 20 seconds waiting for the server response
set user username
set pass your-pass
set host the-host-address
set dir server-dir
spawn sftp $user@$host
expect assword:
send "$pass\r"
expect sftp>
send "cd $dir\r"
expect sftp>
send "mget *\r"
expect sftp>
send "exit\r"
expect eof
Другой возможностью является использование аутентификации с открытым ключом, которая также более безопасна (см. Процедуру). В таком случае вы можете просто использовать sftp напрямую в пакетном режиме:
#!/bin/sh
user=username
host=the-host-address
dir=server-dir
sftp -b - "$user@$host" <<+++EOF+++
cd "$dir"
mget *
exit
+++EOF+++