Как отправить стандартный вывод команды на вход Expect?

789
Josiah

Я хочу написать скрипт shell + ожидающий, который автоматически заполняет мои пароли с помощью утилиты LastPass CLI lpass. Я не уверен, как выполнить отправку пароля, возвращенного lpassна ввод пароля в сценарии ожидаемого.

Пока ожидаемый скрипт выглядит примерно так:

# The beginning isn't important expect -exact "\r Please enter your username and password.\r Username:" send -- "my-username\r" expect -exact "my-username\r Password:" send -- $(lpass show --password service\ im\ connecting\ to) expect -exact "\r # The rest of the expect script follows 

Я не уверен, как на самом деле должен быть записан бит в $ (...) ...

0

1 ответ на вопрос

1
Alex

Вы хотите использовать execфункцию в expectскрипте, чтобы получить то же поведение, что $(...)и в оболочке

См. Пример ниже:
Позвольте использовать внешнюю программу 4expect.shниже, которую мы будем кормить без нашего expectскрипта:

#!/bin/sh # Test program : let set filename as "4expect.sh" # in the same directory where expect script will work  echo; read -p 'question: ' answer echo "Got answer:>$<" 

А вот наш expectскрипт, который будет ожидать «вопрос» от внешней программы и кормить его общим количеством файлов в текущем каталоге (получить выходные данные внешних программ lsи egrep), которые будут использоваться с помощью expects send:

#!/usr/bin/expect -f  spawn -noecho ./4expect.sh expect -re "question" { send -- [exec ls -la . | egrep "^total" ]\r } interact  puts "\nDone.\n" exit 
Проблема не в том, что lpass возвращает пароль в stdout - команда lpass, которую я дал в этом примере, делает это. Это как перехватить этот стандартный вывод и «отправить» его в ожидаемый скрипт. Я не обнаружил, что $ (...) в ожидаемых сценариях работает так же, как в обычных сценариях оболочки. Josiah 7 лет назад 0
Ох, чувак ... Мне очень жаль, я совершенно неправильно понял ваш вопрос. Я удалил свой предыдущий ответ, так как он был неуместен, и заменил его правильным ответом. Duh ... Alex 7 лет назад 1
Пару с этим, чтобы справиться с такими вещами, как ваш проход SUDO http://stackoverflow.com/questions/681928/how-can-i-make-an-expect-script-prompt-for-a-password. Теперь я могу автоматизировать все свои логины. фантастика! Josiah 7 лет назад 0