Я хочу написать скрипт shell + ожидающий, который автоматически заполняет мои пароли с помощью утилиты lpass LastPass CLI. Я не уверен, как выполнить отправку пароля, возвращенного 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

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

1 ответ1

1

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

Смотрите пример ниже:
Позвольте использовать внешнюю программу 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .