Я подозреваю, что это проблема:
send -- "^D"
Вы не отправляете Ctrl-D, вы отправляете символы ^ и D .
Чтобы отправить Ctrl-D
send -- "\04"
Чтобы решить проблему «без вывода, время ожидания», вам нужно изменить ожидаемое регулярное выражение: у вас слишком много новых строк для этого случая , Использование expect -d
показало бы это вам. Например:
send -- "unset PROMPT_COMMAND; PS1='_MYPROMPT_'\r"
expect -re "_MYPROMPT_$"
send -- "$command\r"
expect -re "$command(.*)\r\n_MYPROMPT_$"
Содержимое захватывающих скобок теперь может быть пустым.
Я отключил установку подсказки для ясности.
Для захвата Для выхода из состояния команды вам может потребоваться сделать следующее:
send -- "$command; echo $?\r"
expect -re "$command(.*)\r\n(\d+)\r\n_MYPROMPT_$"
set results [regsub {^\r\n} $expect_out(1,string) ""]
set status $expect_out(2,string)
Я не думаю вы можете разделить stdout и stderr с помощью команды expect
. Я думаю, что оба потока захвачены как "выходные данные". (У меня поблизости нет моей книги «Ожидаем исследования»)
Если это важно, вы можете вызвать команду, перенаправляющую stdout и / или stderr в файл (ы), а затем cat
и захватить содержимое файла.