0

ファイルからルーターに構成コマンドを提供するスクリプトを期待しています。プロセスをファイルに記録しますが、構成ファイルが終了する前にログへの書き込みが停止することを期待しています。たとえば、構成ファイルに

q
r
s
t
あなた
v
w
バツ
y
ぜ
eof

ログには u までのすべてのやり取りが含まれますが、残りはログにはありませんが、プロセスが z までずっと終了しているように見えます。通常のエンドオブファイル比較がうまくいかないようなので、以下を試してみました。

    set ok 0;
    while { $ok == 0 } {
      set line [ gets $config ];


       expect  { 
            "#" { send -s "$line\r"; }
            -re "\[.]" { send -s "$line\r"; }
        }
         if { $line == "eof" } {
           set ok 1;
        } else { }

   }
   close $config

ok を 1 に設定して while ステートメントを終了しますが、スクリプトはその前にログ記録を停止します。

4

1 に答える 1

0

完了するのに時間がかかりすぎていませんか? 私が尋ねる理由は、expect ステートメントのどちらのオプションにも一致しないためにタイムアウトしている可能性があるためです (最初のオプションは「#」プロンプトに一致します... 2 番目のオプションは何に一致するはずですか?)、その場合、expect 時間の後に各パスで、コードは引き続き構成ファイルのすべての行をスイープし、最終的に eof に到達して ok を 1 に設定します。

これが私がすることです:

  • expect_internal 1何が起こっているかの手がかりを得るために、スクリプトの最初のどこかに含めてください
  • set の後にセミコロンを削除してステートメントを送信します... afaik expect はそれらを使用しません (私はそれが不平を言うだろうと思っていました!)
  • オプション(3番目のオプション)をexpectステートメントに追加し、timeoutそこに到達した場合はそれに応じて何かを出力するかもしれません

あなたが言うコマンドのリストは「qrstuvwxyz eof」であると思いますが、これはワンライナーではなく、1行に1つのコマンドですよね?

また、set config [open "/path/to/filename.txt"]スクリプトの先頭に があり、そこのスニペットに表示されていないと思いますか?

exp_internal 1ヘルプが必要な場合は、追加後に取得したものを自由に投稿してください。

于 2013-10-28T23:23:21.490 に答える