2015-06-02 3 views
1

Я пытаюсь вызвать сценарий оболочки и сохранить результат в переменной ожидания. get_pw.sh принимает 2 аргумента и расшифровывает файл, используя предоставленный md5hash. Если я выполнил ./get_pw.sh file.test md5hash из приглашения bash, он вернет строку пароля, как ожидалось. При вызове от ожидания пароль не возвращается. Ожидают отладки шоу:Ожидайте сценарий оболочки вызова

expect: does "" (spawn_id exp0) match regular expression "[^\s]"? 

Так это выглядит как сценарий не возвращает строку пароля при вызове из ожидать. Соответствующий код:

#!/usr/bin/expect 
send "./get_pw.sh file.test md5hash \r" 
expect -re {[^\s]} { 
set password $expect_out(0,string) 
} 
puts "The password is: $password" 
+1

Что вы отправляете этой командной строке? Получает ли 'get_pw.sh' вывод на стандартный вывод или стандартную ошибку или tty напрямую? –

+0

get_pw.sh выводит на стандартный вывод. Ожидать отладки показывает это при отправке команды 'отправить: отправка«./get_pw.sh file.test md5hash \ г»в exp0 ./get_pw.sh file.test md5hash' – Polyamorous

+0

Вы автоматизации оболочки здесь является Предполагается, что эта команда выполняется, или вы пытаетесь запустить 'get_pw.sh' в качестве локальной команды (через локальную оболочку)? Если последние видят ответ Йенса. –

ответ

1

Вы должны spawn команду первой, прежде чем вы можете send вход и выход expect из него.

Чтобы установить значение ожидать переменной на выходе команды, используйте

set varname [exec command] 
+0

Хорошо - думаю, что я буду дальше. Я 'spawn/bin/bash' и, по крайней мере, смог увидеть результат - однако' set password [./get_pw.sh file.test md5hash]; 'дал мне неправильную ошибку имени команды при выполнении скрипта – Polyamorous

+0

@Polyamorous You нужно внимательно прочитать мой пример: отсутствует «exec». – Jens

+0

Так оно и было, большое спасибо! – Polyamorous

0

Если вы должны сделать это с помощью ожидать,

log_user 0 
    spawn -noecho get_pw.sh file hash 
    expect eof 
    set passwd [string trimright $expect_out(buffer) "\r\n"] 
    puts $passwd 

ответ Jens выглядит довольно хорошо сейчас .. .

Смежные вопросы