6

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

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

3 に答える 3

10

ESC 制御シーケンスを送信します。試すsend "\x1b\r"

于 2013-10-16T19:25:54.230 に答える
2

過去数日からこの質問を解決しようとしていて、最終的に解決策を見つけました:)

\x1b\rとは \x1d\rうまくいきませんでした。私はここで解決策を見つけました: Using Control character in a script with tr and echo

次のコードを使用しました。

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

$escseqCtrl+] を取得するために使用します。

仕組み:

echo で制御文字を直接作成できない場合は、tr ユーティリティで作成できます。tr は 8 進数シーケンスも理解します。不要なエコー出力文字を作成し、必要な制御文字に tr 変換します。

たとえば、4 文字のシーケンスを ESCape CTRL-a [ CTRL-w ] にするには、次のようなコマンドを使用します。

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

tr は、パイプを介して echo から 4 文字を読み取ります。e を ESCape (8 進 033) に、a を CTRL-a (8 進 001) に、w を CTRL-w (8 進 027) に変換します。左括弧は変更されていません。tr はそれをそのまま印刷します。

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

于 2014-02-04T19:11:14.263 に答える