2013-10-16 9 views
6

Ich kann eine erstellte Telnet-Sitzung in einem Shell-Skript öffnen, um einige Befehle auszuführen. Danach versuche ich, das Escape-Zeichen mit send zu senden (siehe Syntax unten), aber es kommt nie zu dem Teil, wo ich die Sitzung schließen kann. Kann mir jemand in die richtige Richtung zeigen? Aufgrund dieses Problems öffne ich mehrere Telnet-Sitzungen auf diese Weise, was ich nicht tun möchte.Wie kann ich das Escape-Zeichen ^] durch eine erstellte Telnet-Sitzung senden?

send "^]\r" 
expect "telnet>" 
send "close\r" 
close $spawn_id 
+0

Mit '\ x1b' zu bekommen .... –

+0

Mit' \ u001b' senden. – potrzebie

+0

http://donsnotes.com/tech/charsets/ascii.html#cntrl – user2840240

Antwort

8

Sie senden die ESC control sequence. Versuchen send "\x1b\r"

+3

Danke für Ihre Antwort ... es wies mich in die richtige Richtung. Ich fand, dass x1d \ r druckt ^] was ich brauchte. – user2840240

+1

Ist '\ r' wirklich notwendig? – potrzebie

+0

@potrzebie Es hängt davon ab, was Sie danach senden möchten. Also, nein. :-) –

2

Ich habe versucht, diese Frage seit den letzten paar Tagen zu lösen und endlich eine Lösung gefunden :)

Die \x1b\r und \x1d\r nicht für mich arbeiten. Ich fand die Lösung hier: Using Control character in a script with tr and echo

habe ich den folgenden Code:

escseq=`echo 'e' | tr 'e' '\035'` 

Verwenden $escseq erhalten Strg +].

Wie das funktioniert:

Wenn Ihr Echo kann keine Steuerzeichen direkt machen, die tr Dienstprogramm es für Sie tun können. tr versteht auch Oktalsequenzen. Machen Sie Ihre Echo-Ausgabezeichen, die Sie nicht möchten, und lassen Sie sie in die gewünschten Steuerzeichen übersetzen.

beispielsweise um eine 4-Zeichen-Sequenz ESCape CTRL-a [CTRL-W, einen Befehl wie folgt verwenden:

escseq=`echo 'ea[w' | tr 'eaw' '\033\001\027'` 

tr liest die vier Zeichen nach unten das Rohr von Echo; es übersetzt das e in ESCape (Oktal 033), das a in CTRL-a (Oktal 001) und das w in CTRL-w (Oktal 027). Die linke Klammer wird nicht geändert; tr druckt es wie es ist.

Hinweis: Dies ist sehr nützlich, wenn Sie die Abmeldung einer Telnet-Sitzung mithilfe eines Shell-Skripts automatisieren möchten.

+0

Ich habe es versucht und es funktioniert super für mich. In expect, set 'set escseq 'echo' e '| tr' e '' \ 035 '" ' – harperville

0

STRG + R steht für die "^]" Escape-Sequenz aus telnet

+0

Dies beantwortet die Frage nicht. Das OP kann STRG + R nicht programmatisch senden, während die vorhandene akzeptierte Antwort tatsächlich eine Lösung bietet. – LordWilmore

+0

Realisiert, dass bald nach dem Posten meiner Antwort. Ich wollte, dass die Antwort trotzdem hier ist, wenn jemand sie aus einem anderen Grund aus Versehen für nützlich hält –