Ich schreibe ein Expect-Skript und habe Probleme mit der Shell-Eingabeaufforderung (unter Linux). Mein Expect-Skript erstellt rlogin
und das Remote-System verwendet ksh
. Die Eingabeaufforderung auf dem Remote-System enthält das aktuelle Verzeichnis, gefolgt von " > "
(Leerzeichen größer als Leerzeichen). Ein Skript-Schnipsel könnte sein:Wie kann ich den Eingabepuffer in einem Expect-Skript leeren?
send "some command here\r"
expect " > "
Dies funktioniert für einfache Befehle, aber die Dinge beginnen, falsch zu gehen, wenn der Befehl, den ich die Sende mich die Breite des Anschlusses übersteigt (oder genauer gesagt, was ksh
denkt, ist die Breite Das Terminal). In diesem Fall führt ksh
ein merkwürdiges horizontales Scrollen der interaktiven Befehlszeile durch, das die Eingabeaufforderung neu zu schreiben scheint und ein zusätzliches ">" in die Ausgabe einfügt. Dies führt natürlich dazu, dass das Expect-Skript verwirrt und nicht mehr synchron ist, wenn in der Ausgabe nach der Ausführung eines Befehls mehr als eine Eingabeaufforderung angezeigt wird (mein Skript enthält mehrere Paare send
/expect
).
Ich habe versucht, PS1
auf dem Remote-System zu etwas ausgeprägteren wie "prompt>", aber ein ähnliches Problem entsteht, die mir anzeigt, ist nicht der richtige Weg, um dies zu lösen.
Was ich denke könnte helfen, ist die Fähigkeit für das Skript zu sagen Erwarte, dass "Ich weiß, dass ich zu diesem Zeitpunkt richtig mit dem Remote-System synchronisiert bin, so den Eingabepuffer jetzt." Die expect
Anweisung hat die -notransfer
Markierung, die nicht den Eingangspuffer verwerfen, selbst wenn das Muster übereinstimmt, also denke ich, dass ich das Gegenteil von dem benötige.
Gibt es noch andere nützliche Techniken, mit denen ich die Remote-Shell vorhersehbarer verhalten kann? Ich verstehe, dass Expect eine Menge Arbeit durchläuft, um sicherzustellen, dass die erzeugte Sitzung erscheint, um mit dem Remote-System interaktiv zu sein, aber ich würde lieber einige der nervigeren interaktiven Funktionen (wie das horizontale Scrollen von ksh
) ausgeschaltet sein.
Ausgezeichnet, das scheint genau das zu sein, was ich brauchte. –