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

0

Desejo escrever um script shell + expect que preencha automaticamente minhas senhas por meio do utilitário CLI LastPass lpass. Não sei como realizar o envio da senha retornada lpasspara a entrada de senha em um script esperado.

Até agora, o script expect é semelhante a:

# 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 a parte do $ (...) deve ser escrita ...

Josiah
fonte

Respostas:

2

Você deseja usar a execfunção no expectscript para obter o mesmo comportamento $(...)que no shell

Veja o exemplo abaixo:
Vamos usar um programa externo 4expect.shabaixo, que alimentaremos sem o 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 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 ​​pelos 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
Alex
fonte
O problema não é conseguir que o lpass retorne a senha ao stdout - o comando lpass que dei no exemplo faz isso. É como capturar esse stdout e sendele em um script de expectativa. Eu não achei que $ (...) em scripts de espera funcione como em scripts regulares de shell.
1937 Josiah
11
Ohh, cara ... me desculpe, entendi completamente sua pergunta. Eu removi minha resposta anterior, uma vez que era irrelevante, e a substitui pela resposta correta. Duh ...
Alex
Junte isso para lidar com coisas como o seu passe SUDO. stackoverflow.com/questions/681928/… . Agora eu posso automatizar todos os meus logins. fantástico!
197 Josiah