1

「expect」プログラムのsendコマンドでファイルから読み取り、各行を引数として使用する方法。

以下のようなexpectプログラムでループのような構造を使用したい(注:-whileループは虚数です)。

spawn /my/program

expect {
 -re EBtxjjmEcQTxc0SLd4TdXxjUduxCOLZBwEme2Z.*password: { 
             while read_line in FILE; 
             do 
                 send $read-line; 
             done 
}

「expect」を使用して同等のwhileループ部分をプログラムする方法

4

1 に答える 1

4

質問で、中括弧が欠落していて、変数名(read_lineおよびread-line)を誤って入力したことに注意してください。

ExpectはTcl拡張機能であるため、すべてのTclコマンドを自由に使用できます

spawn /my/program
expect { 
    -re EBtxjjmEcQTxc0SLd4TdXxjUduxCOLZBwEme2Z.*password: { 
        set fh [open FILE r]
        while {[gets $fh read_line] != -1} {
            send "$read_line\r"
        } 
        close $fh
    }
}

tcllibをインストールすると、次のことができます。

package require fileutil
spawn /my/program
expect { 
    -re EBtxjjmEcQTxc0SLd4TdXxjUduxCOLZBwEme2Z.*password: { 
        fileutil::foreachLine read_line FILE {
            send "$read_line\r"
        } 
    }
}
于 2012-12-26T18:26:32.310 に答える