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.