
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 lpass
an 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
exec
Sie möchten die Funktion im expect
Skript 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 expect
Skript, das auf eine „Frage“ von einem externen Programm wartet und es mit allen Dateien im aktuellen Verzeichnis speist (Ausgaben von externen Programmen abrufen ls
usw. ), die von folgendem egrep
verwendet werden :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