¿Cómo envío la salida estándar de un comando a una entrada Expect?

¿Cómo envío la salida estándar de un comando a una entrada Expect?

Quiero escribir un script shell + expect que complete automáticamente mis contraseñas a través de la utilidad CLI de LastPass lpass. No estoy seguro de cómo realizar el envío de la contraseña devuelta lpassa la entrada de contraseña en un script de espera.

El script esperado hasta ahora se parece 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

No estoy seguro de cómo debería escribirse realmente el bit en $(...)...

Respuesta1

Desea utilizar execla función en expectel script para obtener el mismo comportamiento que $(...)en Shell

Vea el ejemplo a continuación:
Usemos el programa externo 4expect.sha continuación que alimentaremos sin 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}<"

Y aquí nuestro expectscript que esperará la "pregunta" del programa externo y lo alimentará con el total de archivos en el directorio actual (obtendrá resultados de los programas externos y ls) egrepque serán utilizados 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

información relacionada