最初にExpectから見ると、非常に簡単です。このset
コマンドは、2つの引数が与えられると、変数の値を設定します。ここで、変数名はkludge
であり、値は。の間の複数行の文字列{braces}
です。Tcl(およびExpect)では、一重引用符がシェルで機能するのと同じように、中括弧が展開(変数置換、コマンド展開など)を抑制することに注意してください。変数kludge
が使用されないと仮定すると、これは完全に無害なステートメントです。
シェルから少しトリッキーです。このコンテキストでのシェルのset
コマンドは、位置パラメータを設定します。このコマンドの後:
$1 = "kludge"
$2 = "{"
$3, $4, ... <= will be the original command line parameters
次に、パラメータの「スタック」shift
をポップ"kludge"
および"{"
オフして、元の位置パラメータを復元する2つのコマンドがあります。次に、exec
コマンドはexpectを起動し、現在実行中のシェルプロセスを置き換えます。使用されなかった場合exec
、expectが実行され、(おそらく)終了し、シェルは次の行に構文エラーを報告します。}
全体として、これは期待されるプログラムを起動するための非常に賢い方法です。「#残りのスクリプトが続く」の前のすべてを次のように置き換えます
#!/usr/bin/expect -f
または、シェル部分でさらに多くのことが起こっている場合は、これを使用します。
#!/bin/bash
do whatever shell initialization required
expect -c << 'END_OF_EXPECT'
# rest of expect script follows
# ...
END_OF_EXPECT
この場合にオプションを渡すには:
expect - "$@" << 'END_OF_EXPECT'
# ...
シングル-
は、コマンドがstdinで実行されることを期待していることを示しています。