Como envio o stdout de um comando para uma entrada Expect?

Como envio o stdout de um comando para uma entrada Expect?

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 lpasspara 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 execa função no expectscript para obter o mesmo comportamento $(...)do shell

Veja exemplo abaixo:
Vamos usar o programa externo 4expect.shabaixo que alimentaremos sem expectscript:

#!/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 expectscript 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 lse 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

informação relacionada