2

telnet セッションを使用して複数のコマンドを送信するために使用するスクリプトがあります。エスケープ文字が必要かどうかわかりません。コマンドを telnet セッションで直接入力すると、機能し、期待どおりの応答が得られます。ただし、スクリプトに配置すると機能しません。

そして、本当に奇妙な部分は、コマンドの 1 つをエコーに入れて、telnet プロンプトからと同じように返されることです...これにより、一部の文字をエスケープする必要があると思いますが、これは私の問題。

スリープコマンドを使用しようとしましたが、実際には何も変わらないようです...

スニペットは次のとおりです。

pushSAT() {
    #This is what the command should look like:
    #EPHM:FPSH,satellite,ephemeris_code,file_name,cmd_action<cr><lf>

    HOST=$1
    SATS=( $(grep O3B_M* $DIR/$FILE2ACU) )

    for i in "${SATS[@]}"
    do
       echo "$i"
       echo "EPHM:FPSH,$i,202,$FILE2ACU,@"; 
       (sleep 2
        echo "EPHM:FPSH,$i,202,$FILE2ACU,@";
        sleep 1
        echo "TGTS:FLST,?";
        sleep 1
        echo "^]";
        sleep 1
        echo "logout";
       ) | telnet $HOST 6100 | tee acuresponse.txt

       log user.info "Pushed $FILE2ACU to $HOST for $i."
    done
}

これは、echo と telnet からの応答です。切れているところに注目してください... 変です!

Loading satellites to ant-3-acu
O3B_M001
,202,ephemeris.txt,@"

ここに問題があります。なぜこれが切れるのですか?

そして、これは失敗しているコマンドから私が期待するものです:

Connected to ant-3-acu (ip).
Escape character is '^]'.
EPHM:FPSH,O3B_M001,202,ephemeris.txt,@
ephm:fpsh,0,0
4

2 に答える 2

0

^] はコントロール/] を意味します。あなたはそれを正しく送信していません。リテラル テキスト "^]" として送信しても機能しません。したがって、ログアウトはおそらく発生しません。

残りの問題が何であれ、それらが存在すると確信していますが、それらがあなたのタイトルと関係があるとは思えません. あなたの質問は、スクリプトに関するものです。

于 2013-05-20T23:04:10.923 に答える