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

0

Eu quero escrever um script shell + expect que preencha automaticamente minhas senhas usando o utilitário LastPass CLI lpass . Não tenho certeza de como realizar o envio da senha retornada por lpass para a entrada de senha em um script de espera.

O script de espera até agora 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 no $ (...) deve realmente ser escrito ...

    
por Josiah 13.01.2017 / 17:13

1 resposta

1

Você deseja usar a função exec no script expect para obter o mesmo comportamento que o $(...) no shell

Veja o exemplo abaixo:
Vamos usar o programa externo 4expect.sh abaixo que iremos alimentar sem o script expect :

#!/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 script expect que aguardará "pergunta" do programa externo e o alimentará com o total de arquivos no diretório atual (obterá a saída de programas externos ls e egrep ) que serão usados por expect ' send :

#!/usr/bin/expect -f

spawn -noecho ./4expect.sh
expect -re "question" { send -- [exec ls -la . | egrep "^total" ]\r }
interact

puts "\nDone.\n"
exit
    
por 13.01.2017 / 19:05