Ожидайте: как получить код выхода из порожденного процесса

87
8

Я не совсем уверен, хорошая идея создать новую тему или "возобновить" эту 3-летнюю тему, если вы считаете, что ее лучше открыть, пожалуйста, извините мой спам на этом форуме, но у меня есть та же проблема и дон 'получить решение из информации о потоке. В Moment у меня был скрипт, который выглядит так:

#!/usr/bin/expect -f
set pass [lindex $argv 0]
spawn <CMD>

expect {
-re "Password: " {
send "$pass\r"
}

expect eof
catch wait result
}
exit [lindex $result 3]

но wenn Я выполняю этот скрипт, я получаю ошибку

can't read "result": no such variable
while executing
"lindex $result 3"
invoked from within
"exit [lindex $result 3]"
(file "./call_tests.exp" line 13)

Я уже выяснил, что, вероятно, проблема в том, что SSH-сессия уже закрыта, когда я пытаюсь прочитать код выхода. Но вчера я начал понимать ожидаемую команду, поэтому я полный новичок, и я бы очень хотел, если кто-то может мне помочь. наилучшие пожелания Dan

спросил(а) 2021-01-19T15:49:15+03:00 2 месяца, 3 недели назад
1
Решение
75

Вы должны написать вот так:

expect {
-re "Password: " {
send "$pass\r"
}
}
expect eof

catch wait result
exit [lindex $result 3]

или это:

expect {
-re "Password: " {
send "$pass\r"
exp_continue
}

eof {
catch wait result
}
}
exit [lindex $result 3]

Согласно ожиданию руководства:

expect [[-opts] pat1 body1]... [-opts] patn [bodyn]

до тех пор, пока один из шаблонов не будет соответствовать выходному процессу, порожденному процессом, указанному периоду времени или просмотру конца файла. Если конечное тело пустое, оно может быть опущено. Шаблоны из последней команды expect_before неявно используются перед любыми другими шаблонами. Шаблоны из последней команды expect_after неявно используются после любых других шаблонов.

Если аргументы для всего оператора ожидания требуют более одной строки, все аргументы могут быть привязаны к одному, чтобы избежать завершения каждой строки с обратным слэшем. В этом случае обычные подстановки Tcl будут иметь место, несмотря на фигурные скобки.

ответил(а) 2021-01-19T15:49:15+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема