
Я хочу написать скрипт 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