
Quero escrever um script shell + expect que preencha automaticamente minhas senhas por meio do utilitário LastPass CLI lpass
. Não tenho certeza de como enviar a senha retornada lpass
para a entrada de senha em um script esperado.
O script esperado até agora se parece com:
# 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
Não tenho certeza de como o bit $(...) deve realmente ser escrito ...
Responder1
Você deseja usar exec
a função no expect
script para obter o mesmo comportamento $(...)
do shell
Veja exemplo abaixo:
Vamos usar o programa externo 4expect.sh
abaixo que alimentaremos sem expect
script:
#!/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}<"
E aqui está nosso expect
script que irá aguardar a "pergunta" do programa externo e alimentá-lo com o total de arquivos no diretório atual (obter saída de programas externos ls
e egrep
) que serão usados por expect
's send
:
#!/usr/bin/expect -f
spawn -noecho ./4expect.sh
expect -re "question" { send -- [exec ls -la . | egrep "^total" ]\r }
interact
puts "\nDone.\n"
exit