2012-07-27 6 views
24

Nie działa też użycie echo-e "\ 029". Ale jeśli użyjesz strg + alt gr + ] bezpośrednio w sesji terminalowej -> to działa.Nie można zamknąć sesji scpi (telnet) z echo "^]", gdy używam go w skrypcie

Muszę zadać moje pytanie bardziej konkretnie:
Podłączam generator RF (AGILENT) przez Telnet/SCPI.
Jeśli robię ten podręcznik na terminalu i prasie pod koniec sesji CTRL + ALT GR + ] dla „^]”, a następnie zamknąć sesję SCPI prawidłowo i mogę wpisać quit aby zamknąć sesję telnet prawidłowo.
Na wyświetlaczu generatora RF nie ma komunikatu o błędzie. Tak powinno być.

Jeśli zrobię to za pomocą skryptu, sesja SCPI wydaje się nie rozpoznawać warunku sygnału przerwania "^]" i zostanie zmuszona do zamknięcia po zakończeniu skryptu (telnet i scpi). -> Wiadomość: "Odłączono od hosta zagranicznego". Niestety, dostaję komunikaty o błędach na wyświetlaczu generatora RF -> „Nieprawidłowy nagłówek” itp

Po pojawieniu udane połączenie: Połączony 192,168.10.66 znak Escape jest „^]” -> To jest punkt sporny. Ręczne wprowadzanie w terminalu działa poprawnie, skrypt nie działa.

Mój skrypt wygląda tak:

function getIDNMessage() 
{ 
    (  
     echo open $1 $2 
     sleep 1 
     echo "*IDN?" 
     sleep 1 
     echo –e "\029"   # or echo “^]” does not work well 
     sleep 1 
     echo "quit\r" 
     sleep 1 
    ) | telnet > scpi_telnet.log 2>&1 
} 

getIDNMessage 192.168.10.66 7777  
+1

Dlaczego po prostu nie "wyjść"? –

+1

Nie widzę tutaj pytania. –

+1

Wygląda na to, że scpi ma polecenie close (* prefix_close *), ale nie zdziwiłbym się, gdyby samo zamknięcie połączenia miało taki sam efekt (wystarczy upaść na koniec skryptu). Podczas uruchamiania telnet prawdopodobnie sprawdza, czy stdin to tty (na przykład potrzebne echo IAC DO/DONT). Normalne telnety wyłączają "aktywne" gromadzenie sesji IAC, gdy są używane na niestandardowym porcie. – wildplasser

Odpowiedz

0

tak musi być. Ponieważ ^] wydrukowany w terminalu na serwerze oznacza dla klienta nic. Klient musi przechwycić ten symbol, zanim zostanie przesłany na serwer i oczywiście nie można go po prostu zapisać na terminalu w programie uruchomionym na serwerze.

Musisz przerwać sesję w inny sposób. Istnieje wiele metod.

  1. Jeśli jesteś wewnątrz uruchomionego programu, można go rozwiązać proste (exit w skorupach sys.exit() w Pythonie lub exit() w wielu innych językach).
  2. Jeśli nie można kontrolować przepływu programu, można zamknąć terminal, zabijając proces będący właścicielem terminala. Musisz znaleźć proces, a następnie użyć kill ... (PID procesu zamiast ...).
  3. Jeśli chcesz zamknąć klienta ze strony klienta, musisz zrobić to samo (kill ...), ale po stronie klienta.
111

Na Linux to rzeczywiście:

CTRL + ] następnie ENTER

Wreszcie wpisać komendę quit.

^] 

telnet> quit 
Connection closed. 
[[email protected] ~]$ 
+7

A następnie wpisz quit. Jest to nawet trudne niż wyjście z vi. –

+1

Zamiast pisać 'quit' możesz również nacisnąć' CTRL' + 'D' (oznaczający" koniec strumienia "), aby opuścić telnet. – qwertz

+1

Zamiast 'quit', możesz wpisać' q'. –

15

Aby zakończyć telnet na RedHat:
typ "CTRL+5" a następnie wpisz "quit"

+0

Działa, gdy zdalny host jest martwy. Wspaniały! – LDMdev

+0

Pracował również w arch. Linux. – gustavwiz

1

^] oznacza ctrl + right wspornik. To dziwne, działa. Zostaniesz przekierowany do wiersza telnetu, gdzie możesz wpisać quit.

Na klawiaturach międzynarodowych znak ] często nie jest pojedynczym kluczem i należy go zastąpić innym klawiszem. Prawidłowy klucz to zazwyczaj klawisz po prawej stronie klawisza P lub następny klawisz po nim.

Oto lista oparta na komentarze poniżej:

Finnish, Swedish, Norwegian, Danish: ctrl + å 
French: ctrl + 6 
German: ctrl + ü 
Swiss: ctrl + ¨ 
Hungarian: ctrl + 5 
Portuguese: ctrl + ´ 
Dutch, Belgian: ctrl + $ 
Canadian French: ctrl + ç 
1

na moim duńskiej klawiaturze nie było Ctrl + å - lecz kluczem do prawej strony å (co ma kapelusz, tylda i umlaut)

2

Aby sesja skorzystać z poniższego polecenia

  1. Ctrl +]
  2. telnet> quit

to działa idealnie w REHL i CentOS.

Powiązane problemy