1

Я пытаюсь использовать функцию обработки для обработки rsync через оболочку ssh, но она застряла.

Если я запускаю команду rsync, она работает (здесь упрощенно): она запрашивает мой пароль и копирует файлы на сервер:

rsync -e ssh -<other_params>

Если я тогда приложу это к ожидаемому:

expect -d -c "spawn rsync -e ssh -<other_params>" -c "expect password:" -c "send mypass\r"

Он не выполняется должным образом, программа существует и файлы не копируются. Даже режим отладки не дает много подсказок.

Мое лучшее предположение заключается в том, что rsync порождает процесс ssh, а процесс ssh - это то, с чем нужно взаимодействовать, но send выбирает идентификатор процесса rsync и отправляет туда ввод.

Какие-нибудь мысли?

1 ответ1

0

Ответом на этот вопрос было то, что мне нужно было добавить команду ожидания в конце ожидаемого сценария. Как показано в вопросе, он работал, но отправлял пароль и сразу же убивал процесс. Добавление wait ожидает завершения процесса rsync.

Исправленная версия:

expect -d -c "spawn rsync -e ssh -<other_params>" -c "expect password:" -c "send mypass\r" -c "wait"

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