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

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

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

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

# 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

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

решение1

Вы хотите использовать 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:>${answer}<"

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

#!/usr/bin/expect -f

spawn -noecho ./4expect.sh
expect -re "question" { send -- [exec ls -la . | egrep "^total" ]\r }
interact

puts "\nDone.\n"
exit

Связанный контент