#!/usr/bin/expect -f
...
spawn -noecho ssh -C "$user@$host" $cmds
expect {
-re "connecting .yes/?no.*" {
exp_send "yes\r"
exp_continue
} -re "$user@$host's .assword:.*" {
exp_send "$password\r"
exp_continue
} eof
}
catch wait result
exit [lindex $result 3]
По ssh удалённо выполняется сложный скрипт. Этот сложный скрипт выполняет другие системные команды, ставит deb пакеты, запускает что-то в фоне, и т.д. Где-то секунд через 15 от начала его работы expect перестаёт получать от него данные (stdout), в списках процессов на удалённой машине я могу наблюдать как он работает и успешно завершается, но expect не реагирует больше ни на что. Если вместо catch/exit вставить interact, то нет проблем - виден весь stdout, ничего не зависает. Но после interact не остаётся кода завершения удалённого скрипта, а он позарез нужен... Что посоветуете, как правильно получить код завершения удалённого скрипта?