Wie sende ich die Standardausgabe eines Befehls an eine Expect-Eingabe?

Wie sende ich die Standardausgabe eines Befehls an eine Expect-Eingabe?

Ich möchte ein Shell- und ein Expect-Skript schreiben, das meine Passwörter über das LastPass-CLI-Dienstprogramm automatisch ausfüllt lpass. Ich bin nicht sicher, wie ich das zurückgegebene Passwort lpassan die Passworteingabe in einem Expect-Skript senden kann.

Das Expect-Skript sieht bisher ungefähr so ​​aus:

# 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

Ich bin nicht sicher, wie das Bit im $(...) eigentlich geschrieben werden soll...

Antwort1

execSie möchten die Funktion im expectSkript verwenden , um das gleiche Verhalten wie $(...)in der Shell zu erhalten

Siehe Beispiel unten:
Lassen Sie uns unten ein externes Programm verwenden 4expect.sh, das wir mit unserem Skript füttern 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}<"

Und hier unser expectSkript, das auf eine „Frage“ von einem externen Programm wartet und es mit allen Dateien im aktuellen Verzeichnis speist (Ausgaben von externen Programmen abrufen lsusw. ), die von folgendem egrepverwendet werden :expectsend

#!/usr/bin/expect -f

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

puts "\nDone.\n"
exit

verwandte Informationen