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 ...

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.