この記事では、expect スクリプトに渡すことができるコマンド ライン オプションについて説明します。
スクリプト言語を初めて使用する場合は、まず、expect hello world の例から始めてください。
1. -c オプションを使用して、コマンドラインからスクリプトを期待して実行
また、次に示すように -c オプションを使用して、コマンド ラインで直接実行することもできます。
$ expect -c 'expect "\n" {send "pressed enter\n"} pressed enter $
上記のスクリプトを実行すると、改行 (\n) を待ち、Enter キーを押すと、「pressed enter」というメッセージを出力して終了します。
2. -i オプションを使用して、expect スクリプトを対話的に実行します
以下に示すように、-i オプションを使用して標準入力からコマンドを読み取ることにより、スクリプトを対話的に実行できることを期待します。
$ expect -i arg1 arg2 arg3 expect1.1>set argv arg1 arg2 arg3 expect1.2>
通常、上記の expect コマンドを -i オプションなしで実行すると、arg1 がスクリプト ファイル名として扱われるため、-i オプションを指定すると引数リストが中断されません。
このオプションは、expect スクリプトを -c フラグで実行する場合に便利です。デフォルトでは、expect はインタラクティブに実行されるためです。
3.期待スクリプトの実行中にデバッグ メッセージを出力する
以下に示すように、-d オプションを使用してコードを実行すると、診断メッセージが出力されるようにすることができます。
$ cat sample.exp # !/usr/bin/expect -f expect "\n"; send "pressed enter"; $ expect -d sample.exp expect version 5.43.0 argv[0] = expect argv[1] = -d argv[2] = sample.exp set argc 0 set argv0 "sample.exp" set argv "" executing commands from command file sample.exp expect: does "" (spawn_id exp0) match glob pattern "\n"? no expect: does "\n" (spawn_id exp0) match glob pattern "\n"? yes expect: set expect_out(0,string) "\n" expect: set expect_out(spawn_id) "exp0" expect: set expect_out(buffer) "\n" send: sending "pressed enter" to { exp0 pressed enter}
4. -D を使用して期待デバッガーを有効にします
-D オプションは、デバッガーを有効にするために使用され、ブール値を引数として取るだけです。これは、デバッガーを開始する必要があるか、初期化して後で使用する必要があるかを示します。
$ expect -D 1 script
-D オプションの左側の前のオプションは、デバッガーの前に処理されます。その後、残りのコマンドはデバッガーの起動後に実行されます。
$ expect -c 'set timeout 10' -D 1 -c 'set a 1' 1: set a 1 dbg1.0>
5.スクリプトを1行ずつ実行する
通常、expect はスクリプト全体を実行前にメモリに読み込みます。 -b オプションを指定すると、スクリプトが一度に 1 行ずつ読み込まれます。これは、その時点までに を完全に書き込んでおらず、expect が実行を開始するため、一時ファイルの書き込みを回避する場合に役立ちます。
$ expect -b
6.コマンドライン引数を解釈しないようにする
—フラグを使用して、コマンドライン引数を解釈しないようにすることができます。
通常、以下に示すようにコマンド ライン引数を読み取ります。
$ cat print_cmdline_args.exp #!/usr/bin/expect puts 'argv0 : [lindex $argv 0]'; puts 'argv1 : [lindex $argv 1]';
上記のスクリプトを実行する際に、以下に示すように (期待されるオプションではなく) 引数のように扱われるコマンド ライン オプションを渡します。
$ expect print_cmdline_args.exp -d -c argv0 : -d argv1 : -c