Итак, у меня есть сценарий ожидаемого типа, который работает:

#!/usr/bin/expect
spawn scp me@myserver.com:* .
expect {
password: {send "mypassword"; exp_continue}
}

Исходя из справочной страницы для ожидаемого, я думаю, что я должен иметь возможность сделать это вместо командной строки, чтобы выполнить то же самое

expect -c "spawn scp me@myserver.com:* ." -c "expect {password: {send \"mypassword\\r\"; exp_continue}}"

Но это возвращается в терминал

spawn scp me@myserver.com:* .
me@myserver.com's password: 

а затем через несколько секунд сдается без сообщения об ошибке и никогда ничего не делает.

Заметка

Да, я хорошо знаю, что я не должен делать это с помощью scp и должен вместо этого использовать ключи.

1 ответ1

0

Я не уверен, но я подозреваю, что проблема состоит из нескольких аргументов -c . Вы можете использовать here-doc для передачи скрипта на stdin:

expect <<'END'
spawn scp me@myserver.com:* .
expect {
password: {send "mypassword"; exp_continue}
}
END

Одинарные кавычки вокруг первого 'END' будут указывать весь документ.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .