2013-10-16 13 views
6

Jestem w stanie otworzyć zarodnikowaną sesję telnetu w skrypcie powłoki, aby uruchomić niektóre polecenia. Później próbuję wysłać znak escape za pomocą send (zobacz składnię poniżej), ale nigdy nie dociera do części, w której mogę zamknąć sesję. Czy ktoś może wskazać mi właściwy kierunek? Z powodu tego problemu otwieram w ten sposób wiele sesji telnetu, których nie chcę robić.Jak wysłać znak ucieczki ^] przez sesję zarodkowanego telnetu?

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

Z '\ x1b' .... –

+0

od' wysłać \ u001b'. – potrzebie

+0

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

Odpowiedz

8

Wysyłamy ESC control sequence. Spróbuj send "\x1b\r"

+3

Dziękuję za odpowiedź ... wskazała mi właściwy kierunek. Znalazłem, że x1d \ r prints ^] jest tym, czego potrzebowałem. – user2840240

+1

Czy '\ r' jest naprawdę konieczne? – potrzebie

+0

@potrzebie To zależy od tego, co chcesz później wysłać. Więc nie. :-) –

2

starałem się rozwiązać tę kwestię, ponieważ w ciągu ostatnich kilku dni i wreszcie znalazł rozwiązanie :)

\x1b\r i \x1d\r nie działał na mnie. Znalazłem rozwiązanie tutaj: Using Control character in a script with tr and echo

Użyłem poniższy kod:

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

Zastosowanie $escseq zdobycia Ctrl +].

Jak to działa:

Jeśli echo nie można dokonać bezpośrednio znaki sterujące, narzędzie tr może zrobić to za Ciebie. tr rozumie także sekwencje ósemkowe. Twórz znaki wyjściowe echa, których nie chcesz, i tłumacz je na znaki kontrolne, które chcesz.

Na przykład, do 4-postaciach sekwencja ucieczki Ctrl-a [Ctrl-W użyciu polecenia tak:

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

tr odczytuje czterech znaków w dół rury z echa; tłumaczy e na ESCape (ósemkowo 033), a na CTRL-a (ósemkowo 001), a na CTRL-w (ósemkowo 027). Lewy nawias nie jest zmieniony; tr drukuje tak, jak jest.

Uwaga: Jest to niezwykle użyteczne, jeśli chcesz zautomatyzować wylogowanie się z sesji telnet przy użyciu skryptu powłoki.

+0

Spróbowałem tego i działa to dla mnie świetnie. Oczekuj, wykonaj 'set escseq" echo 'e' | tr 'e' '\ 035' "' – harperville

0

CTRL + R reprezentuje sekwencję "^]" ucieczki wyjść z programu telnet

+0

To nie odpowiada na pytanie. Program nie jest w stanie wysyłać CTRL + R programowo, podczas gdy istniejąca zaakceptowana odpowiedź w rzeczywistości zapewnia rozwiązanie. – LordWilmore

+0

Zrealizowałem to wkrótce po opublikowaniu mojej odpowiedzi. Chciałem jednak, aby odpowiedź znalazła się tutaj, jeśli ktoś przypadkowo uzna to za przydatne z innego powodu –