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

915
Josiah

Ich möchte eine Shell schreiben + erwartet ein Skript, das meine Kennwörter über das LastPass-CLI-Dienstprogramm automatisch ausfüllt lpass. Ich bin nicht sicher, wie ich das zurückgesendete Kennwort lpassan die Kennworteingabe 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 mir nicht sicher, wie das Bit in $ (...) eigentlich geschrieben werden sollte ...

0

1 Antwort auf die Frage

1
Alex

Sie möchten die execFunktion im expectSkript verwenden, um dasselbe Verhalten wie $(...)in der Shell zu erhalten

Sehen Sie sich das Beispiel unten an:
Lassen Sie 4expect.shuns das externe Programm verwenden, das wir mit dem expectSkript herausgeben:

#!/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:>$<" 

Und hier unser expectSkript, das auf "Frage" von einem externen Programm wartet und es mit Gesamtdateien im aktuellen Verzeichnis füttert (Ausgabe von externen Programmen erhalten) lsund egrepdas von expect's verwendet wird send:

#!/usr/bin/expect -f  spawn -noecho ./4expect.sh expect -re "question" { send -- [exec ls -la . | egrep "^total" ]\r } interact  puts "\nDone.\n" exit 
Das Problem besteht nicht darin, dass lpass das Kennwort an stdout zurückgibt - der Befehl lpass, den ich im Beispiel gegeben habe, tut dies. Es ist, wie man diesen Standard einfängt und in einem Expect-Skript "sendet". Ich habe nicht gefunden, dass $ (...) in Expect-Skripten funktioniert, wie dies beim regulären Shell-Scripting der Fall ist. Josiah vor 7 Jahren 0
Oh Mann, es tut mir wirklich leid, ich habe deine Frage völlig falsch verstanden. Ich habe meine vorherige Antwort entfernt, da sie irrelevant war, und sie durch eine korrekte Antwort ersetzt. Duh ... Alex vor 7 Jahren 1
Verbinden Sie sich damit mit Dingen wie Ihrem SUDO-Pass. http://stackoverflow.com/questions/681928/how-can-i-make-an-expect-script-prompt-for-a-password. Jetzt kann ich alle meine Anmeldungen automatisieren. Fantastisch! Josiah vor 7 Jahren 0