
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 lpass
a 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 exec
la función en expect
el script para obtener el mismo comportamiento que $(...)
en Shell
Vea el ejemplo a continuación:
Usemos el programa externo 4expect.sh
a continuación que alimentaremos sin expect
script:
#!/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 expect
script 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
) egrep
que 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