Может ли ожидаемый сценарий продолжить выполнение другой команды после «взаимодействия»? - PullRequest
4 голосов
/ 27 сентября 2011

Привет, ребята. Я новичок в ожидании сценариев, и я пишу сценарий для запуска ssh, чтобы войти на удаленный хост, после того, как все операции выполнены, я набираю exit и выход из системы. Но я хочу, чтобы скрипт продолжал работать и записывал журнал на локальный хост. Сценарий выглядит примерно так:

#!/usr/bin/expect
spwan ssh qwerty@remote_host

expect {
    "password:" {
        send "123123\r"
    }
}

interact;
send "echo $(date) >> login_history.log\r"

Но последняя команда «отправить ...» всегда терпела неудачу с сообщением об ошибке вроде "send: spawn id exp4 not open ..."

Когда я выхожу из системы с удаленного хоста, может ли ожидаемый скрипт продолжать работать, пока он выполняется на локальном хосте? Большое спасибо.

1 Ответ

4 голосов
/ 27 сентября 2011

ДА, обработка может продолжаться после [взаимодействия].

Краткий ответ: изменить последнее {send ...} на {exec date >> login_history.log}

Естьнесколько концепций, которые вы захотите понять, чтобы добиться желаемого потока управления.Во-первых, http://www.cotse.com/dlf/man/expect/interact_cmd_desc.htm предоставляет краткий обзор и пример промежуточного [взаимодействия] использования.

Во-вторых: почему вы увидели сообщение "... идентификатор спавна ... не открыт ..."?Потому что идентификатор spawn не открыт.Сценарий, который вы написали, по сути сказал: «взаимодействуйте, а затем, после завершения взаимодействия, отправьте новую команду процессу ssh ».Если вы уже вышли из системы, то, конечно, этот идентификатор для несуществующего процесса больше недоступен.

В-третьих: как вы добиваетесь того, чего хотите?Я не уверен, что вы хотите.Звучит , как если бы вам было достаточно просто преобразовать [send], как я описал выше.Как это выглядит для вас?

...