web-dev-qa-db-ja.com

スクリプトで使用すると、エコー "^]"でscpi(telnet)セッションを閉じることができません

の用法 echo-e "\ 029"も機能しません。しかし、使用する場合 strg + alt gr + ] ターミナルセッションで直接->動作します。

より具体的に質問しなければなりません。
Telnet/SCPIを介してRFジェネレーター(AGILENT))を接続します。
端末でこのマニュアルを実行し、セッションの最後にを押した場合 CTRL + ALT GR +] '^]'の場合、scpiセッションを適切に閉じます。quitと入力して、telnetセッションを適切に閉じます。
RFジェネレーターのディスプレイにエラーメッセージはありません。

スクリプトでこれを行うと、SCPIセッションはブレーク信号条件「^]」を認識しないようで、スクリプトの終了後に強制的に閉じられます(telnetおよびscpi)。 ->メッセージ:「外部ホストによって切断されました」。残念ながら、RF generator-> "invalid header"などのディスプレイにエラーメッセージが表示されます。

接続に成功した後:192,168.10.66に接続されているエスケープ文字が「^]」->これが問題のポイントです。ターミナルでの手動入力は正常に機能し、スクリプトは機能しません。

私のスクリプトは次のようになります。

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    
35
Bernie

Linuxでは、実際には次のとおりです。

CTRL + ] それから ENTER

最後にquitコマンドを入力します。

^]

telnet> quit
Connection closed.
[fred@localhost ~]$
137
Kajackdfw

Redhatでtelnetを終了するには:
タイプ"CTRL+5"を入力してから"quit"

32
Kindi BALDE

以下のコマンドを使用してセッションを閉じるには

  1. Telnet> quit
  2. rHELおよびCentOSで完璧に動作します。

.

^] 手段 ctrl + rightブラケット。それは奇妙なことですが、動作します。 telnetプロンプトが表示され、quitと入力できます。

国際キーボードでは、]文字は多くの場合単一のキーではなく、他のキーに置き換える必要があります。通常、正しいキーはPの右側のキー、またはその次のキーです。

以下はコメントに基づいたリストです。

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

私のデンマークのキーボードではそうではありませんでした Ctrl + å -しかし、代わりに右側のキー å (帽子、チルド、ウムラウトがあります)

1
Kristian

トルコ語キーボードを搭載したMacOSの場合:
Ctrl + Option + ü

次に、
> quit

0
0x01h

Ctrl + ]これは^]と表示され、その後

telnet> q qは終了するためのものです

0
Sadee

そうでなければなりません。サーバー上のターミナルに表示される_^]_は、クライアント側にとっては何の意味もないからです。クライアントは、サーバーに送信される前にこのシンボルをキャッチする必要があります。もちろん、サーバーで実行されているプログラムでターミナルに書き込むことはできません。

そのため、他の方法でセッションを中断する必要があります。多くの方法があります。

  1. 実行中のプログラム内にいる場合は、単純に終了することができます(シェルのexitまたはsys.exit() in pythonまたはexit() in他の多くの言語)。
  2. プログラムフローを制御できない場合は、ターミナルの所有者であるプロセスを強制終了してターミナルを閉じることができます。プロセスを見つけてから_kill ..._(_..._の代わりにプロセスのPID)を使用する必要があります。
  3. クライアント側からクライアントを閉じたい場合は、クライアント側で同じ(_kill ..._)を行う必要があります。
0
Igor Chubin