Ich habe dieses einfache expect-Skript, das einen Befehl sendet und auf die Antwort wartet und nur einige der Zeilen übereinstimmen.wie an stdout im expect script nur die übereinstimmenden Zeilen gesendet werden
#!/usr/bin/expect -f
log_user 0
send "user --all\r"
expect {
timeout { send_user "\nTimeout during command\n"; exp_continue }
-re "OK OK OK STARTED" { send_user "$expect_out(0,string)\n"; append dbscntl $expect_out(buffer); exp_continue }
-re "Succeess!" { exp_continue }
-re ">"
}
exit 0
Wie kann ich in der Regex Linie die ganze Linie send_out, die den regulären Ausdruck „OK OK OK SCHRITTE“ abgestimmt wurde.
In meinem Code mit der send_user "$expect_out(0,string)\n";
gibt mir nur die passende Regex Ausdruck "OK OK OK STARTED" und nicht die ganze Zeile.
Beispiel von Linien, die mit dem regulären Ausdruck übereinstimmen würden:
0 Running site1 OK OK OK STARTED
1 Panding site1 OK OK OK STARTED
2 Running site1 OK OK - STARTED
3 Stopped site1 - OK OK STARTED
Jetzt würde ich bekommen:
OK OK OK STARTED
OK OK OK STARTED
Aber ich würde die Information der zweiten Spalte verpassen.
So würde Ich mag so etwas wie:
0 Running site1 OK OK OK STARTED
1 Panding site1 OK OK OK STARTED
Dank!
Warum brauchen Sie dies zu erwarten? grep scheint die einfachste Lösung zu sein –
Die Verwendung von exp_continue in einem Timeout-Block scheint nicht sinnvoll. –
Um die obigen Fragen zu klären. 1. Dieser Code ist nur ein Teil des Expect-Skripts und der Befehl, der gesendet wird, wird nach Anmeldeinformationen fragen, deshalb erwarten. 2. Der Ausdruck des Befehls ist viel mehr als die Zeilen, die ich zuordnen möchte, also brauche ich exp_continue, bis ich '>' bekomme. – FotisK