2013-10-16 3 views
6

いくつかのコマンドを実行するために、シェルスクリプトで生成されたtelnetセッションを開くことができます。その後、send(以下の構文を参照)を使用してエスケープ文字を送信しようとしていますが、セッションを閉じることができる部分に決して到達しません。誰かが私を正しい方向に向けることができますか?この問題のため、私はこの方法で複数のtelnetセッションを開きます。これはやりたくありません。生成されたtelnetセッションを介してエスケープ文字^]を送信するにはどうすればよいですか?

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

の外の\ u001b'を送る'で –

+0

を取得するには、 "^]" エスケープシーケンスを表します。 – potrzebie

+0

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

答えて

8

ESC control sequenceを送信します。私は日の過去のカップルので、この疑問を解決しようと最終的に解決策を見つけたsend "\x1b\r"

+3

あなたの応答に感謝します...それは正しい方向に私を指摘しました。私はx1d \ rが^私が必要としているものを印刷することを発見しました。 – user2840240

+1

本当に '\ r'は必要ですか? – potrzebie

+0

@potrzebie後で送信したいものによって異なります。そう、いいえ。 :-) –

2

を試してみてください:)

\x1b\r\x1d\rは私のために動作しませんでした。私はここで解決策を見つけた:Using Control character in a script with tr and echo

私は次のコードを使用:] Ctrlキー+を取得するために使用$escseq

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

を。

をあなたの反響が直接制御文字を作ることができない場合は、TRユーティリティはあなたのためにそれを行うことができます。この仕組み

。 trも8進シーケンスを理解しています。必要のないエコー出力文字を作成し、必要な制御文字にtrを翻訳してください。

たとえば、このようなコマンドを使用し、4文字のシーケンスエスケープCTRL - [CTRL-Wを作製した:

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

Trがエコーからパイプダウン4つの文字を読み取ります。 eをESCape(8進数033)に、aをCTRL-a(8進数001)に、そしてwをCTRL-w(8進数027)に変換します。左括弧は変更されません。 trはそれをそのまま出力します。

注:これは、シェルスクリプトを使用してTelnetセッションのログアウトを自動化する場合に非常に便利です。

+0

私はこれを試して、それは私のために素晴らしい作品です。期待どおりに 'set escseq" echo 'e' | tr 'e' '\ 035' "' – harperville

0

CTRL + Rは....の\ x1b` `とのTelnet

+0

これは質問に答えません。 OPはCTRL + Rをプログラムで送信することはできませんが、既存の受け入れられた回答は実際に解決策を提供します。 – LordWilmore

+0

私の答えを投稿した直後にそれを実現しました。それにもかかわらず、誰かが誤ってそれが別の理由で役に立ったら –

関連する問題