Manpages

名 前

expect − 対 話 的 な プ ロ グ ラ ム と の や り と り を 自 動 化 す る プ ロ グ ラ ム , バ ー ジ ョ ン 5

書 式

expect [ −dDinN ] [ −c cmds ] [ [f|b] ] cmdfile ] [ args ]

イ ン ト ロ ダ ク シ ョ ン

Expect は 、 ス ク リ プ ト の 指 示 に 従 っ て 、 対 話 的 な プ ロ グ ラ ム と "会 話 "す る プ ロ グ ラ ム で あ る 。 以 下 の ス ク リ プ ト に 示 す よ う に 、 Expect に は 、 対 話 プ ロ グ ラ ム か ら の 期 待 さ れ う る 入 力 と そ れ に 対 す る 正 し い 応 答 を 教 え て お く 。 イ ン タ プ リ タ は 分 岐 処 理 と 高 度 な 制 御 構 造 を 提 供 し 、 対 話 プ ロ グ ラ ム へ の 指 示 を 行 な う 。 さ ら に 、 必 要 な 時 に ス ク リ プ ト か ら 制 御 を 奪 っ て 直 接 人 間 が 指 示 を 行 な い 、 そ の 後 、 制 御 を ス ク リ プ ト へ 戻 す こ と が で き る 。

ExpectkExpectTk の 混 合 物 で あ る 。 Expect で あ り 、 か つ 、 Tk’s wish で あ る か の よ う に 振 舞 う 。 Expect は 、 C あ る い は C++ (つ ま り 、 Tcl 以 外 )か ら 、 直 接 使 う こ と も で き る 。 libexpect(3)を 参 照 。

"Expect"と い う 名 前 は 、 uucpで 有 名 に な っ た send/expect の 概 念 に 由 来 す る 。 (kermitや 他 の モ デ ム 制 御 プ ロ グ ラ ム で も 、 こ の 概 念 は 使 わ れ て い る ) し か し 、 uucp と は 違 っ て Expect は 一 般 化 さ れ て い る の で 、 想 像 さ れ る ど ん な プ ロ グ ラ ム や タ ス ク に 対 し て も マ ク ロ コ マ ン ド (user-level command)と し て 機 能 で き る 。 Expect は 、 同 時 に 複 数 の プ ロ グ ラ ム と 会 話 す る こ と が で き る 。

Expect に で き る こ と の 例 を い く つ か 挙 げ て お く :

• 電 話 代 を 払 わ ず に ロ グ イ ン で き る よ う に コ ン ピ ュ ー タ か ら あ な た に 電 話 を 掛 け 直 さ せ る 。

• ゲ ー ム

(例 え ば rogue)を 始 め る 時 に 、 最 適 な パ ラ メ タ が も ら え な か っ た 場 合 最 適 な パ ラ メ タ が も ら え る ま で 何 度 で も リ ス タ ー ト を 行 な い 、 そ の 後 制 御 を 人 間 に 移 す 。

fsckを 走 ら せ た 時 に 現 れ る 質 問 に 、 前 も っ て 決 め て お い た 方 針 に 従 っ て 、 "yes", "no", "手 入 力 "を 切 替 え て 、 返 答 す る 。

他 の ネ ッ ト ワ ー ク や BBS(例 え ば MCI Mail, CompuServe)に 接 続 し た 時 に 自 動 的 に メ ー ル の 取 り 込 み 、 発 信 を 行 な う 。

環 境 変 数 、 カ レ ン ト デ ィ レ ク ト リ 、 そ の 他 の 情 報 を 、 rlogin, telnet, tip, su, chgrp な ど を 行 な っ た 先 へ 持 っ て い く 。 こ れ ら の 処 理 を シ ェ ル が 行 な え な い 理 由 は た く さ ん あ る (や っ て み れ ば わ か る だ ろ う )。 全 部 Expect な ら で き る 。 一 般 に Expect は 、 プ ロ グ ラ ム と ユ ー ザ ー の や り と り が 必 要 な プ ロ グ ラ ム を 走 ら せ る と き に 役 に 立 つ 。 大 事 な こ と は 、 こ の や り と り が プ ロ グ ラ ム の 性 格 を 持 っ て い る と い う こ と で あ る 。 Expect は 、 必 要 な ら ユ ー ザ ー に 制 御 を 返 す こ と も で き る (し か も 、 プ ロ グ ラ ム は 中 断 さ れ な い )。 同 様 に 、 ユ ー ザ ー は 制 御 を い つ で も ス ク リ プ ト に 返 す こ と が で き る 。

用 法

Expect は 、 cmdfile を 読 み 込 み 、 実 行 す る コ マ ン ド の リ ス ト を 得 る 。 Expect は 、 #! 表 記 を サ ポ ー ト す る OS で 、 先 頭 行 に

#!/usr/local/bin/expect −f と 書 い て お い て 実 行 さ せ る こ と も で き る 。 も ち ろ ん 、 パ ス は 正 確 に Expect の あ る 場 所 を 指 示 し て い な け れ ば な ら な い 。 /usr/local/bin は 、 一 例 で あ る 。

−c フ ラ グ で 、 ス ク リ プ ト を 実 行 す る 前 に 、 実 行 す る コ マ ン ド を 指 示 す る 。 コ マ ン ド は シ ェ ル に 壊 さ れ な い よ う に ク オ ー ト し て お く べ き で あ る 。 こ の オ プ シ ョ ン は 何 回 出 て き て も 構 わ な い 。 複 数 コ マ ン ド を 指 示 し た 場 合 は 、 セ ミ コ ロ ン で 連 結 さ れ た コ マ ン ド の よ う に 扱 わ れ る 。 コ マ ン ド は 現 れ た 順 に 実 行 さ れ る 。 (Expectk で は 、 −command と 書 く )

−d フ ラ グ で 、 デ バ ッ グ 情 報 出 力 を 有 効 に す る 。 基 本 的 に 内 部 の コ マ ン ド (例 え ば expectinteract) の 振 舞 い を 報 告 す る 。 こ の フ ラ グ は "exp_internal 1"と ス ク リ プ ト の 先 頭 に 書 く の と 同 じ こ と だ が 、 さ ら に Expect の バ ー ジ ョ ン 番 号 も 出 力 さ れ る 。 ( strace コ マ ン ド は 、 命 令 を ト レ ー ス す る の に 便 利 で あ る 。 trace コ マ ン ド は 、 変 数 値 を ト レ ー ス す る の に 便 利 で あ る 。 ) (Expectk を 使 う 時 は 、 こ の オ プ シ ョ ン は −diag と 書 く 。 )

−D フ ラ グ で 対 話 型 デ バ ッ ガ を 有 効 に す る 。 整 数 値 が 続 か な け れ ば な ら な い 。 値 が 0 で な い か 、 C が 押 さ れ る と 、 次 の Tcl 処 理 の 前 で デ バ ッ ガ に 制 御 が 移 る 。 ブ レ ー ク ポ イ ン ト に か か っ た 時 や 他 の デ バ ッ グ 命 令 を 実 行 し た 時 も 、 同 じ で あ る 。 デ バ ッ ガ に つ い て の 情 報 が も っ と 欲 し け れ ば 、 README や 下 記 の 関 連 項 目 を 読 む こ と 。 (Expectk を 使 っ て い る 時 は 、 こ の オ プ シ ョ ン は −Debug)

−f フ ラ グ で 、 コ マ ン ド を 読 ん で く る フ ァ イ ル を 指 示 す る 。 こ の フ ラ グ は あ っ て も な く て も 良 い の だ が 、 #! 表 記 と 一 緒 に 使 う と 引 数 か ら プ ロ グ ラ ム 名 を 除 け る か ら 、 そ の 場 合 意 味 が あ る 。 (Expectk で は −file) デ フ ォ ル ト で は 、 コ マ ン ド フ ァ イ ル が メ モ リ に 一 度 に 読 み 込 ま れ 、 そ こ で 実 行 さ れ る 。 一 行 ず つ コ マ ン ド フ ァ イ ル を 読 ん だ 方 が 望 ま し い 場 合 も あ る 。 例 え ば 、 標 準 入 力 は こ の よ う に 扱 っ た 方 が 良 い 。 強 制 的 に こ の モ ー ド を 指 定 す る に は 、 −b フ ラ グ を 指 定 す る 。 (Expectkで は 、 −buffer) stdio の バ ッ フ ァ リ ン グ は 依 然 有 効 で あ る が 、 FIFO ま た は stdin か ら 読 み 込 む 場 合 は 問 題 は 起 こ ら な い は ず で あ る こ と に 注 意 す る こ と 。

"−"が フ ァ イ ル 名 と し て 渡 さ れ る と 、 標 準 入 力 か ら ス ク リ プ ト が 読 み 込 ま れ る 。 (本 当 に "−"と 言 う フ ァ イ ル が 読 み た け れ ば 、 "./−"と 書 く こ と )

−i フ ラ グ を 指 示 す る と 、 Expect は フ ァ イ ル か ら ス ク リ プ ト を 読 ま ず に 対 話 用 プ ロ ン プ ト を 表 示 す る 。 exit コ マ ン ド か 、 EOF を 受 け る と シ ェ ル を 終 了 す る 。 詳 細 に つ い て は interpreter (下 記 ) を 参 照 の こ と 。 −i を 指 定 し た 場 合 に は 、 コ マ ン ド フ ァ イ ル も −c も 指 示 さ れ な か っ た も の と し て 実 行 さ れ る 。 (Expectkで は −interactive)

−− は 、 オ プ シ ョ ン の 終 り を 区 切 る の に 用 い ら れ る (省 略 可 能 )。 こ れ は 、 あ な た が オ プ シ ョ ン タ イ プ の 引 数 を Expect に 解 釈 さ せ な い で 、 ス ク リ プ ト に そ の ま ま 渡 し た い 時 に 役 に 立 つ 。 #! 行 に こ れ を 置 い て 、 Expect に オ プ シ ョ ン と し て 解 釈 さ せ な い よ う に す る こ と が で き て 便 利 た 。 例 え ば 、 以 下 の よ う に 書 く と (ス ク リ プ ト 名 も 含 め て )オ リ ジ ナ ル の 引 数 は 、 変 数 argv に 残 さ れ る 。

#!/usr/local/bin/expect −−

#!行 に 引 数 を 加 え る と 、 通 常 の getopt(3)execve(2) で は そ の 引 数 が 見 え て し ま う こ と に 注 意 す る こ と 。

−N フ ラ グ を 用 い な い 限 り 、 フ ァ イ ル $exp_library/expect.rc が (あ れ ば )自 動 的 に 実 行 さ れ る 。 (Expectk で は 、 −NORC) −n フ ラ グ (Expectk で は 、 −norc) を 用 い な い 限 り 、 続 い て 、 フ ァ イ ル ~/.expect.rc が 、 自 動 的 に 実 行 さ れ る 。 環 境 変 数 DOTDIR が 定 義 さ れ て い れ ば 、 そ こ が .expect.rc の あ る デ ィ レ ク ト リ と し て 扱 わ れ る 。 こ の 二 つ の rcフ ァ イ ル の 実 行 よ り 先 に −c フ ラ グ で 指 示 さ れ た コ マ ン ド が 実 行 さ れ る 。

−v フ ラ グ を 指 示 す る と 、 バ ー ジ ョ ン 番 号 を 表 示 し て 終 了 す る 。 (Expectkで は 、 −version) オ プ シ ョ ン args は 、 リ ス ト に 変 換 さ れ て 、 変 数 argv に 保 存 さ れ る 。 argc は 、 argv の リ ス ト 長 (要 素 の 数 )に 設 定 さ れ る 。

argv0 は 、 ス ク リ プ ト 名 に 設 定 さ れ る (ス ク リ プ ト を 使 っ て い な け れ ば 、 バ イ ナ リ の 名 前 に な る )。 例 え ば 、 以 下 の ス ク リ プ ト を 実 行 す る と 、 ス ク リ プ ト 名 と 最 初 の 引 数 3つ を 表 示 す る :

send_user "$argv0 [lrange $argv 0 2]\n"

コ マ ン ド

Expect は 、 Tcl (Tool Command Language)を 使 用 し て い る 。 Tcl は 、 制 御 フ ロ ー (例 え ば if, for, break)、 式 評 価 、 お よ び 、 再 帰 や プ ロ シ ジ ャ 定 義 等 他 の い く つ か の 機 能 を 提 供 す る 。 こ こ で 使 わ れ て い る の に 定 義 が な い コ マ ン ド (例 え ば 、 set, if, exec) は 、 Tcl コ マ ン ド で あ る 。 (tcl(3)を 参 照 )。 Expect は 、 以 下 に 記 述 す る 追 加 コ マ ン ド を サ ポ ー ト す る 。 記 述 が な い 場 合 は 、 そ の コ マ ン ド は 空 文 字 列 を 返 す 。 コ マ ン ド は 探 し や す い よ う に ア ル フ ァ ベ ッ ト 順 に 並 べ て あ る 。 し か し 、 初 め て 使 う 方 は 、 最 初 に spawn, send, expect, interact の 説 明 を こ の 順 番 で 読 ん だ 方 が 分 か り や す い だ ろ う 。 こ の 言 語 (Expect と Tcl の 両 方 )へ の イ ン ト ロ ダ ク シ ョ ン と し て は 、 "Exploring Expect"と い う 本 (関 連 項 目 を 参 照 )が ベ ス ト で あ る 。 こ の マ ニ ュ ア ル ペ ー ジ は リ フ ァ レ ン ス と し て 書 い て い る の で 、 含 ま れ て い る 例 は 非 常 に 限 ら れ て い る 。 注 意 す る こ と 。 こ の マ ニ ュ ア ル ペ ー ジ で 、 大 文 字 の "E"で "Expect"と あ れ ば 、 そ れ は 、 Expect プ ロ グ ラ ム を 指 し 、 一 方 小 文 字 の "e"で "expect"と あ れ ば 、 そ れ は 、 Expect プ ロ グ ラ ム に 実 装 さ れ て い る expect コ マ ン ド を 指 す 。 注 意 す る こ と 。
close
[-slave] [−onexec 0|1] [−i spawn_id] カ レ ン ト プ ロ セ ス へ の コ ネ ク シ ョ ン を ク ロ ー ズ す る 。 ほ と ん ど の 対 話 型 プ ロ グ ラ ム が 標 準 入 力 の EOF を 検 出 し exit す る 。 そ れ ゆ え 、 close は そ の プ ロ セ ス を kill す る の に も 通 常 充 分 で あ る 。 −i フ ラ グ を 指 示 す る と 、 続 く spawn_id を 持 つ プ ロ セ ス を ク ロ ー ズ す る 。

expectinteract は 両 方 と も 、 カ レ ン ト プ ロ セ ス が exit し た 時 点 を 検 出 し て 、 明 示 し な く て も close を 実 行 す る 。 し か し 、 "exec kill $pid" な ど の よ う に 、 あ な た が プ ロ セ ス を kill し て い る な ら 、 明 示 的 に close を 呼 ぶ 必 要 が あ る 。

−onexec フ ラ グ を 指 示 す る と 、 新 し い spawn が 起 き た 時 ま た は プ ロ セ ス が 重 ね ら れ た 時 に 前 の spawn を 閉 じ る べ き か ど う か を 指 示 す る こ と が で き る 。 前 の spawn id で 開 い た ま ま に し て お き た け れ ば 、 値 0 を 用 い る 。 0 で な い 整 数 を 指 示 す る と 、 新 し い プ ロ セ ス 中 で は 前 の spawn は ク ロ ー ズ さ れ る (デ フ ォ ル ト )。

−slave フ ラ グ を 指 示 す る と 、 そ の spawn id の 抱 え て い る ス レ ー ブ の spawn も ク ロ ー ズ す る 。 ("spawn -pty"を 参 照 ) コ ネ ク シ ョ ン が ク ロ ー ズ さ れ る と 、 ス レ ー ブ は オ ー プ ン 状 態 で あ っ て も ク ロ ー ズ さ れ る 。 コ ネ ク シ ョ ン の ク ロ ー ズ が 明 示 さ れ て い た か 否 か に 全 然 関 わ り な く 、 関 係 す る カ ー ネ ル プ ロ セ ス ス ロ ッ ト を ク リ ア し て し ま い た け れ ば 、 wait を 呼 ぶ こ と 。 close は 、 wait を 呼 ば な い 。 プ ロ セ ス へ の コ ネ ク シ ョ ン を ク ロ ー ズ す る と 、 そ の プ ロ セ ス が exit す る と い う 保 証 が な い か ら で あ る 。 も っ と 知 り た け れ ば 、 wait の 項 を 参 照 す る こ と 。

debug [[-now] 0|1] は 、 Tcl デ バ ッ ガ を 制 御 す る 。 デ バ ッ ガ に よ り 、 ス テ ッ プ 実 行 、 ブ レ ー ク ポ イ ン ト の 設 定 な ど が 行 な え る 。 引 数 が な い 場 合 、 デ バ ッ ガ が 走 っ て い れ ば 1 を 、 そ う で な け れ ば 0 を 返 す 。 引 数 が 1 な ら 、 デ バ ッ ガ が 起 動 さ れ る 。 引 数 が 0 な ら 、 デ バ ッ ガ が 停 止 す る 。 引 数 1 の 前 に −now フ ラ グ が あ れ ば 、 デ バ ッ ガ は 即 座 に 起 動 さ れ る (つ ま り 、 debug コ マ ン ド そ の も の の 途 中 で )。 そ う で な け れ ば 、 デ バ ッ ガ は 次 の Tcl コ マ ン ド か ら 起 動 さ れ る 。

debug コ マ ン ド は ト ラ ッ プ を 変 更 し な い 。 -D フ ラ グ を つ け て 起 動 さ せ た 場 合 と は そ こ が 違 う (上 記 参 照 )。 デ バ ッ ガ に つ い て は 、 README フ ァ イ ル と 関 連 項 目 を 参 照 す る こ と 。

disconnect

fork さ れ た プ ロ セ ス を 端 末 か ら 切 り 離 す 。 バ ッ ク グ ラ ウ ン ド で 動 作 は 続 く 。 プ ロ セ ス は 可 能 で あ れ ば 自 分 自 身 の プ ロ セ ス グ ル ー プ を 与 え る 。 標 準 入 出 力 は 、 /dev/null に リ ダ イ レ ク ト さ れ る 。 以 下 の 断 片 は 、 disconnect を 使 っ て 、 バ ッ ク グ ラ ウ ン ド で ス ク リ プ ト の 実 行 を 続 け る 。

if {[fork]!=0} exit
disconnect
. . . 以 下 の ス ク リ プ ト は 、 パ ス ワ ー ド を 読 ん で 、 一 時 間 毎 に パ ス ワ ー ド を 要 求 す る プ ロ グ ラ ム を 実 行 す る 。 ス ク リ プ ト は パ ス ワ ー ド を 読 み 込 ん で い る の で 、 タ イ プ す る の は 一 回 だ け で 済 む 。 (パ ス ワ ー ド の エ コ ー を 避 け る 方 法 に つ い て は 、 stty コ マ ン ド を 参 照 )
send_user "password?\ "
expect_user -re "(.*)\n"
for {} 1 {} {
if {[fork]!=0} {sleep 3600;continue}
disconnect
spawn priv_prog
expect Password:
send "$expect_out(1,string)\r"
. . .
exit } シ ェ ル の 非 同 期 実 行 (&)時 に disconnect を 用 い る 利 点 は 、 Expect が disconnect の 前 に 端 末 情 報 を 保 存 し て お い て 、 後 で 新 し い pty に そ の パ ラ メ タ を 適 用 で き る 点 に あ る 。 & を 使 っ て い て Expect が 制 御 を 受 け と っ て disconnect さ れ て し ま う と 、 端 末 情 報 を 読 み 込 む こ と は で き な い 。

exit [−opts] [status]

Expect を exit さ せ る か 、 そ の た め の 準 備 を 行 な う 。

−onexit フ ラ グ は 、 続 く 引 数 を exit ハ ン ド ラ と し て 用 い る 。 引 数 が な け れ ば 、 exit ハ ン ド ラ は 何 も し な い 。

−noexit フ ラ グ を 指 定 す る と Expect は 、 exit の 準 備 を し て OS へ 制 御 を 返 す 直 前 に 停 止 す る 。 ユ ー ザ ー の 定 義 し た exit ハ ン ド ラ は 、 Expect 自 身 の 内 部 ハ ン ド ラ と 同 じ よ う に 実 行 さ れ る 。 そ れ 以 上 Expect の コ マ ン ド が 実 行 さ れ る べ き で は な い 。 あ な た が 他 の Tcl Extension を Expect に つ け て い る 場 合 に こ の 機 能 は 意 味 が あ る 。 Expect の exit が も う 一 度 呼 び 出 さ れ る と (こ う い う 場 合 も 起 こ り 得 る )、 ハ ン ド ラ は 処 理 を 返 さ な い 。

exit す る 際 に 、 全 て の spawn さ れ た プ ロ セ ス へ の コ ネ ク シ ョ ン は ク ロ ー ズ さ れ る 。 ク ロ ー ズ は EOF 検 出 に よ っ て 行 な わ れ る 。 exit は 、 普 通 の exit(2) が 行 な う 以 上 の こ と は し な い 。 そ れ で 、 spawn さ れ た プ ロ セ ス が EOF を チ ェ ッ ク し な い 場 合 、 そ の プ ロ セ ス は 走 り 続 け る 。 (spawn さ れ た プ ロ セ ス へ 送 ら れ た シ グ ナ ル を 判 断 す る と い っ た こ と に は 複 数 の 条 件 が 関 わ っ て く る 。 こ れ ら は 、 シ ス テ ム 依 存 で あ り 、 典 型 的 な 動 作 は 各 シ ス テ ム の exit(3) の ド キ ュ メ ン ト に 記 述 さ れ て い る 。 )

status (指 定 が な い と き は 、 0 )は 、 Expect の 、 終 了 ス テ ー タ ス と し て シ ス テ ム に 返 さ れ る 。 exit は 、 ス ク リ プ ト の 終 り に 達 す る と 、 書 い て い な く て も 実 行 さ れ る 、

exp_continue [-continue_timer]

exp_continue コ マ ン ド は expect 自 身 に 待 っ て い た 値 が 来 な か っ た 時 の よ う に 、 expect の 実 行 を 続 け る 。 デ フ ォ ル ト で は exp_continue は 時 間 切 れ タ イ マ ー を リ セ ッ ト す る 。 -continue_timer フ ラ グ は タ イ マ ー を 再 実 行 し な い よ う に す る 。 (よ り 詳 細 な 情 報 は expect を 参 照 の こ と 。 )

exp_internal [−f file] value

value が ゼ ロ で な け れ ば 、 以 降 の コ マ ン ド の 診 断 情 報 を Expect 内 部 の stderr に 送 る よ う に な る 。 value に 0を 指 定 す る と こ の 出 力 は 止 ま る 。 こ の 診 断 情 報 に は 、 受 け と っ た す べ て の 文 字 と 、 現 在 の 出 力 と パ タ ー ン を マ ッ チ さ せ る 全 試 行 が 含 ま れ る 。

file オ プ シ ョ ン を 指 定 す る と 、 す べ て の 通 常 お よ び 診 断 出 力 が そ の フ ァ イ ル に 出 力 さ れ る 。 ( value の 値 と は 無 関 係 に )。 す で に オ ー プ ン さ れ て い る 診 断 出 力 フ ァ イ ル は 、 す べ て ク ロ ー ズ さ れ る 。

−info フ ラ グ は 、 最 後 に 指 定 さ れ た info フ ラ グ で な い 引 数 の 内 容 を 返 す 。

exp_open [args] [−i spawn_id] 元 の spawn id に 結 び つ け ら れ た フ ァ イ ル ID を 返 す 。 そ の フ ァ イ ル ID は 、 Tcl の open コ マ ン ド で オ ー プ ン し た 時 と 同 様 に 扱 え る 。 (spawn id は 、 も う 使 わ れ る べ き で な い 。 wait も 実 行 す べ き で は な い 。 )

−leaveopen フ ラ グ は 、 spawn id を オ ー プ ン し た ま ま に し て お く 。 wait が 、 そ の spawn id に 対 し て 実 行 さ れ ね ば な ら な い 。

exp_pid [−i spawn_id] 現 在 の spawn さ れ た プ ロ セ ス の プ ロ セ ス ID を 返 す 。 −i フ ラ グ を 指 示 す る と 、 与 え ら れ た spawn id に 対 す る プ ロ セ ス の ID を 返 す 。
exp_send

send の エ イ リ ア ス 。

exp_send_error

send_error の エ イ リ ア ス 。

exp_send_log

send_log の エ イ リ ア ス 。

exp_send_tty

send_tty の エ イ リ ア ス 。

exp_send_user

send_user の エ イ リ ア ス 。

exp_version [[−exit] version] は 、 ス ク リ プ ト が 現 バ ー ジ ョ ン の Expectで 動 く こ と を 確 か め る 時 に 役 に 立 つ 。 引 数 が な け れ ば 、 Expect の 現 在 の バ ー ジ ョ ン を 返 す 。 こ の バ ー ジ ョ ン は あ な た の ス ク リ プ ト 内 で 設 定 し て も 良 い 。 あ な た が 最 近 の バ ー ジ ョ ン に 入 っ た 機 能 を 使 わ な い の で あ れ ば 、 も っ と 前 の バ ー ジ ョ ン を 指 定 す る こ と が で き る 。 バ ー ジ ョ ン は ド ッ ト で 区 切 ら れ た 3 つ の 番 号 で あ る 。 最 初 の 番 号 は 、 メ ジ ャ ー 番 号 で あ る 。 違 う メ ジ ャ ー 番 号 の Expect 用 に 書 い た ス ク リ プ ト は 、 ま ず 動 か な い 。 exp_version は 、 メ ジ ャ ー 番 号 が マ ッ チ し な い と エ ラ ー を 返 す 。

2 番 め の 番 号 は マ イ ナ ー 番 号 で あ る 。 使 っ て い る Expect よ り マ イ ナ ー 番 号 が よ り 大 き い Expect 向 け の ス ク リ プ ト は 、 新 機 能 の 使 用 未 使 用 に よ る が 、 動 か な い か も 知 れ な い 。 exp_version は メ ジ ャ ー 番 号 が マ ッ チ し て も マ イ ナ ー 番 号 が 使 っ て い る Expect の バ ー ジ ョ ン よ り 大 き い と エ ラ ー を 返 す 。

3番 め の 番 号 は 、 バ ー ジ ョ ン 比 較 に は 使 わ れ な い 。 し か し 、 文 書 の 更 新 や プ ロ グ ラ ム の 最 適 化 が 行 な わ れ て 、 Expect の デ ィ ス ト リ ビ ュ ー シ ョ ン が 更 新 さ れ る と 、 番 号 が 増 え て い く 。 新 し い マ イ ナ ー バ ー ジ ョ ン が 設 定 さ れ る 度 に 、 0 に リ セ ッ ト さ れ る 。

−exit フ ラ グ を つ け る と 、 バ ー ジ ョ ン が 合 わ な か っ た 時 に Expect は エ ラ ー を 表 示 し exit す る 。

expect [[−opts] pat1 body1] ... [−opts] patn [bodyn] は 、 spawn さ れ た プ ロ セ ス の 出 力 が パ タ ー ン の ど れ か に マ ッ チ す る か 、 指 定 さ れ た 時 間 が 経 過 す る か 、 enf-of-file を 見 つ け る か 、 の い ず れ か が 成 立 す る ま で ウ ェ イ ト す る 。 最 後 の body が 空 な ら 、 そ れ は 省 略 で き る 。 一 番 最 後 に 実 行 さ れ た expect_before コ マ ン ド の パ タ ー ン が 、 ど の パ タ ー ン よ り 先 に チ ェ ッ ク さ れ る 。 一 番 最 後 に 実 行 さ れ た expect_after コ マ ン ド の パ タ ー ン が 、 ど の パ タ ー ン よ り 後 に チ ェ ッ ク さ れ る 。

expect 全 体 へ の 引 数 が 1 行 に 収 ま ら な か っ た 場 合 は 、 引 数 を "ブ レ ー ス "す る こ と で 、 各 行 の 終 り に バ ッ ク ス ラ ッ シ ュ を つ け る の を 避 け る こ と が で き る 。 こ の 場 合 、 ブ レ ー ス し た に も か か わ ら ず 通 常 の Tcl 展 開 が 発 生 す る 。 も し 、 パ タ ー ン が キ ー ワ ー ド eof で あ れ ば 、 end-of-file 発 見 時 に 処 理 が 実 行 さ れ る 。 も し 、 パ タ ー ン が キ ー ワ ー ド timeout で あ れ ば 、 タ イ ム ア ウ ト が 発 生 し た 時 に 処 理 が 実 行 さ れ る 。 timeout キ ー ワ ー ド が 使 わ れ な か っ た 場 合 、 タ イ ム ア ウ ト 時 に は な に も し な い 。 デ フ ォ ル ト タ イ ム ア ウ ト は 10 秒 で あ る 。 設 定 す る こ と も で き る 。 例 え ば 30 秒 と 設 定 し た け れ ば 、 "set timeout 30"を 実 行 す る こ と 。 タ イ ム ア ウ ト さ せ な い た め に は 、 値 −1 を 設 定 す る 。 も し 、 パ タ ー ン が キ ー ワ ー ド default で あ れ ば 、 タ イ ム ア ウ ト か end-of-file の い ず れ か で 処 理 が 実 行 さ れ る 。 パ タ ー ン に マ ッ チ す れ ば 、 処 理 は 実 行 さ れ る 。 expect は 、 行 な っ た 処 理 (関 連 す る ブ レ ー ス 内 の 処 理 )の 結 果 を 返 す 。 (パ タ ー ン に マ ッ チ し な か っ た 時 は 、 空 文 字 列 を 返 す 。 ) 複 数 の パ タ ー ン に マ ッ チ し た 場 合 、 最 初 に マ ッ チ し た パ タ ー ン に 対 応 す る 処 理 が 実 行 さ れ る 。 対 話 型 プ ロ グ ラ ム か ら の 新 し い 出 力 が Expect に 届 く た び に 、 リ ス ト さ れ て い る 順 に パ タ ー ン と の 比 較 が 行 な わ れ る 。 そ れ ゆ え 、 マ ッ チ す べ き も の が な い こ と を 確 認 す る た め に 、 プ ロ ン プ ト の よ う に 来 る こ と が わ か っ て い る パ タ ー ン を 用 意 す る こ と が で き る 。 プ ロ ン プ ト が な い 場 合 に は 、 (あ な た が 手 で 打 つ 時 に 判 断 し て い る よ う に ) timeout を 用 い な け れ ば な ら な い 。 パ タ ー ン は 3 通 り に 書 け る 。 デ フ ォ ル ト は 、 Tcl の string match コ マ ン ド の 書 式 で あ る 。 (こ の パ タ ー ン は グ ロ ブ で 参 照 さ れ る C-shell の 正 規 表 現 に 似 て い る 。 ) −gl フ ラ グ は 、 他 の マ ッ チ か ら パ タ ー ン を 保 護 す る の に 使 う 。 "-"で 始 ま る パ タ ー ン は 、 こ の 方 法 で 保 護 す べ き で あ る 。 ("-"で 始 ま る 文 字 列 は 将 来 の 拡 張 で 、 オ プ シ ョ ン と し て 使 わ れ る か も 知 れ な い か ら ) 例 え ば 、 以 下 の 断 片 は ロ グ イ ン の 成 功 を 監 視 す る 。 (abort は ス ク リ プ ト の ど こ か 他 の 場 所 で 定 義 さ れ て い る と 仮 定 し て い る 。 注 意 す る こ と 。 )

expect {
busy {puts busy\n ; exp_continue}
failed abort
"invalid password" abort
timeout abort
connected }

4番 め の パ タ ー ン に は ス ペ ー ス が 含 ま れ て い る の で ク オ ー ト が 必 要 で あ る 。 ア ク シ ョ ン と パ タ ー ン を 分 離 す る セ パ レ ー タ で な い こ と を 指 示 す る 必 要 が あ る 。 (3番 め と 4番 め の )よ う に 同 じ ア ク シ ョ ン を 持 つ リ ク エ ス ト も 並 べ て 書 く 必 要 が あ る 。 こ れ は 、 正 規 表 現 パ タ ー ン を 用 い る こ と で 回 避 で き る (下 記 参 照 )。 グ ロ ブ ス タ イ ル パ タ ー ン に つ い て も っ と 情 報 が 欲 し け れ ば 、 Tcl の マ ニ ュ ア ル を 読 む こ と 。 正 規 表 現 パ タ ー ン は 、 Tcl の regexp ("regular expression"の 短 縮 )コ マ ン ド で 定 義 さ れ る 文 法 に 従 う 。 regexpパ タ ー ン は 、 −re フ ラ グ で 始 め る 。 前 の 例 を 、 regexp で 書 き 直 す と 、 こ う な る 。 :

expect {
busy {puts busy\n ; exp_continue}
−re "failed|invalid password" abort
timeout abort
connected } ど ち ら の パ タ ー ン の タ イ プ も 、 "固 定 さ れ て い な い "。 ど う い う 意 味 か と い う と 、 文 字 列 全 体 に マ ッ チ す る 必 要 は な く て 、 文 字 列 の ど こ で も マ ッ チ す れ ば 良 い と い う こ と で あ る 。 ^ が 先 頭 に マ ッ チ す る 。 $ が 末 尾 に マ ッ チ す る 。 文 字 列 の 末 尾 に マ ッ チ さ せ な け れ ば 、 spawn さ れ た プ ロ セ ス か ら エ コ ー さ れ た 文 字 列 の 途 中 で 切 り 上 げ て レ ス ポ ン ス を 返 せ る こ と に 注 意 す る こ と 。 正 し く 処 理 が 実 行 さ れ て い て も 、 出 力 は 不 自 然 に 見 え る 可 能 性 が あ る 。 そ れ で 、 文 字 列 の 終 り の 文 字 を 正 確 に 記 述 で き る な ら 、 $ を 使 う こ と を 勧 め る 。 多 く の エ デ ィ タ で は 、 ^ と $ は 行 頭 、 行 末 に 正 確 に マ ッ チ す る 。 し か し 、 expect は 行 指 向 で は な い の で 、 (行 で は な く )デ ー タ の 始 ま り と 終 り に マ ッ チ す る 。 ("EXPECTヒ ン ト "内 の 、 バ ッ フ ァ リ ン グ の 消 化 不 良 に 関 す る 部 分 を 参 照 の こ と )

−ex フ ラ グ は 、 "正 確 に (exact)"指 示 さ れ た 文 字 列 に マ ッ チ す る 。 * や ^ な ど の 解 釈 は 行 な わ れ な い 。 (た だ し 、 通 常 の Tcl 展 開 は 行 な わ れ る )。 Exact パ タ ー ン は 常 に 固 定 さ れ て い る 。

−nocase フ ラ グ は 、 小 文 字 が 含 ま れ て い る 場 合 に 大 文 字 に 変 換 し て か ら マ ッ チ さ せ る 。 パ タ ー ン に は 影 響 し な い 。 出 力 を 読 ん で い て 、 2000 バ イ ト を 超 え て し ま っ た デ ー タ は "忘 れ ら れ る "。 こ の 動 作 は 、 match_max 関 数 で 変 更 で き る 。 (極 端 に 大 き な 値 は パ タ ー ン マ ッ チ の 性 能 を 低 下 さ せ る こ と に 注 意 す る こ と 。 ) patlistfull_buffer を 指 定 す る と 、 match_max バ イ ト 以 上 の デ ー タ を 受 け て パ タ ー ン マ ッ チ し な か っ た と き に 、 処 理 が 実 行 さ れ る 。 full_buffer キ ー ワ ー ド の 有 無 に 関 わ ら ず 、 忘 れ ら れ た デ ー タ は expect_out(buffer) に 保 存 さ れ る 。

patlist に 、 キ ー ワ ー ド null を 指 定 す る と 、 ヌ ル 文 字 が 許 可 さ れ ( remove_nulls コ マ ン ド を 通 し て )、 ヌ ル 文 字 (ASCII 0)に マ ッ チ す る 。 glob や regexp で は 0 バ イ ト に マ ッ チ す る こ と が で き な い 。 パ タ ー ン (あ る い は 、 eol, full_buffer)に マ ッ チ す る と 、 マ ッ チ し た 部 分 の 文 字 列 か 、 そ の 前 の マ ッ チ し な か っ た 文 字 列 が 、 変 数 expect_out(buffer) に 保 存 さ れ る 。

9 個 ま で の マ ッ チ し た 部 分 文 字 列 は 、 変 数 expect_out(1,string) か ら expect_out(9,string) に 保 存 さ れ る 。 -indices フ ラ グ を パ タ ー ン の 前 で 指 定 す る と 、 マ ッ チ し た 部 分 文 字 列 の 開 始 位 置 と 終 了 位 置 が ( lrange の 引 数 と し て 使 え る 形 で )、 変 数 expect_out(X,start)expect_out(X,end) に 保 存 さ れ る 。 X は 数 字 で 0 〜 9 ま で 。 0 は パ タ ー ン 全 体 が マ ッ チ し た 部 分 を 指 示 す る 。 例 え ば 、 プ ロ セ ス が "abcdefgh\n"を 出 力 し 、 以 下 の 形 :

expect "cd" で 受 け る と 、 以 下 の 文 を 実 行 し た の と 同 じ 結 果 と な る 。

set expect_out(0,string) cd
set expect_out(buffer) abcd こ の 時 、 "efgh\n"は 出 力 バ ッ フ ァ に 残 る 。 プ ロ セ ス が "abbbcabkkkka\n"を 出 力 し 、 以 下 の 形 :

expect −indices −re "b(b*).*(k+)" で 受 け る と 、 以 下 の 文 を 実 行 し た の と 同 じ 結 果 に な る 。

set expect_out(0,start) 1
set expect_out(0,end) 10
set expect_out(0,string) bbbcabkkkk
set expect_out(1,start) 2
set expect_out(1,end) 3
set expect_out(1,string) bb
set expect_out(2,start) 10
set expect_out(2,end) 10
set expect_out(2,string) k
set expect_out(buffer) abbbcabkkkk こ の 時 、 "a\n"は 出 力 バ ッ フ ァ に 残 る 。 パ タ ー ン "*" (と -re ".*")は 、 プ ロ セ ス か ら の デ ー タ が さ ら に 来 な い 限 り 、 出 力 バ ッ フ ァ を フ ラ ッ シ ュ し な い 。 通 常 、 マ ッ チ し た 出 力 は Expect の 内 部 バ ッ フ ァ か ら 、 切 り 捨 て ら る 。 こ の 動 作 は 、 −notransfer フ ラ グ で 抑 止 す る こ と が で き る 。 こ の フ ラ グ は 、 ス ク リ プ ト を 試 し て い る 時 に 役 に 立 つ (そ し て 、 "-not"と 略 記 し て も 良 い )。 マ ッ チ し た 出 力 を 送 っ て き た プ ロ セ ス へ の spawn id は 、 expect_out(spawn_id) に 保 存 さ れ る 。

−timeout フ ラ グ は 、 こ の expect コ マ ン ド の 中 の timeout 時 刻 を timeout 変 数 で な く 指 示 さ れ た 値 に 設 定 す る 。 デ フ ォ ル ト で は 、 パ タ ー ン は カ レ ン ト プ ロ セ ス か ら の 出 力 に マ ッ チ さ せ る の だ が 、 −i フ ラ グ を 設 定 す る と 、 指 定 さ れ た spawn_id リ ス ト に 対 応 す る プ ロ セ ス 群 か ら の 出 力 に マ ッ チ さ せ る こ と が で き る 。 (次 の −i で の 指 定 が あ る ま で 有 効 で あ る 。 ) spawn_id リ ス ト は 、 ス ペ ー ス で 区 切 っ た spawn_id の リ ス ト か 、 そ の よ う な 値 を 持 つ 変 数 へ の 参 照 で な く て は な ら な い 。 例 え ば 、 以 下 の 例 は カ レ ン ト プ ロ セ ス か ら の "connected"と $proc2 と 言 う 名 前 の spawn_id か ら の "busy","failed","invalid password" を 待 ち 受 け る 。

expect {
−i $proc2 busy {puts busy\n ; exp_continue}
−re "failed|invalid password" abort
timeout abort
connected } 大 域 変 数 any_spawn_id の 値 は 、 今 の expect コ マ ン ド 内 で −i フ ラ グ を 指 示 し た spawn_id の 全 て に マ ッ チ さ せ る た め に 使 わ れ る 。 −i フ ラ グ を パ タ ー ン な し で 指 定 す る と (す な わ ち 、 別 の −i が 直 後 に 続 く と )、 any_spawn_id で 指 定 さ れ た 、 同 じ expect コ マ ン ド 内 の 他 の パ タ ー ン に 対 し て 、 有 効 に な る 。

−i フ ラ グ に は 、 グ ロ ー バ ル 変 数 の 名 前 を 指 定 す る こ と も で き る 。 そ の 場 合 、 そ の 変 数 は 、 spawn id の リ ス ト で あ る 。 変 数 は 変 わ る た び に 読 み 直 さ れ る 。 こ う す る こ と で 、 コ マ ン ド が 実 行 さ れ て い る 間 に I/O ソ ー ス を 変 更 す る こ と が で き る 。 こ の 方 法 で 指 定 さ れ る spawn id を "間 接 (indirect)" spawn id と 呼 ぶ 。

breakcontinue な ど の ア ク シ ョ ン は 、 制 御 構 造 (す な わ ち 、 for,proc )内 で 通 常 通 り の 振 舞 い を す る 。

exp_continue コ マ ン ド は 、 expect ル ー プ か ら 抜 け る よ う な 状 況 で 実 行 を 続 け さ せ る 。 ル ー プ を 書 い た り 、 expect コ マ ン ド を 繰 り 返 す こ と を 避 け る 時 に 便 利 で あ る 。 以 下 の 例 は ロ グ イ ン を 自 動 化 す る コ ー ド の 断 片 で あ る 。 exp_continue に よ っ て 、 (再 び プ ロ ン プ ト を 探 す た め の )2 つ め の expect コ マ ン ド を 書 か な く て 済 ん で い る 。

expect {
Password: {
stty -echo
send_user "password (for $user) on $host: "
expect_user -re "(.*)\n"
send_user "\n"
send "$expect_out(1,string)\r"
stty echo
exp_continue }
incorrect {
send_user "invalid password or account\n"
exit }
timeout {
send_user "connection to $host timed out\n"
exit }
eof {
send_user \
"connection to host failed: $expect_out(buffer)"
exit }
-re $prompt } 例 え ば 、 以 下 の 断 片 は 既 に 自 動 化 さ れ て い る ユ ー ザ ー ガ イ ド へ の や り と り を 補 助 す る 。 こ の 場 合 、 端 末 は raw モ ー ド に な る 。 ユ ー ザ ー が ’+’を 押 す と 変 数 が イ ン ク リ メ ン ト さ れ る 。 "p"が 押 さ れ る と 、 プ ロ セ ス へ 復 帰 情 報 が 送 ら れ る 。 お そ ら く は 同 じ よ う に "i"が 押 さ れ る と 、 ス ク リ プ ト か ら 制 御 を 奪 い 、 ユ ー ザ ー か ら の 制 御 が 行 な え る 。 ど の 場 合 も exp_continue コ マ ン ド が 、 今 の expect に 、 処 理 を 行 な わ せ た 後 再 び パ タ ー ン マ ッ チ さ せ て い る 。

stty raw −echo
expect_after {
−i $user_spawn_id
"p" {send "\r\r\r"; exp_continue}
"+" {incr foo; exp_continue}
"i" {interact; exp_continue}
"quit" exit } デ フ ォ ル ト で は 、 exp_continue は 、 タ イ ム ア ウ ト タ イ マ ー を リ セ ッ ト す る 。 タ イ マ を 再 開 さ せ る に は 、 exp_continue コ マ ン ド に −continue_timer フ ラ グ を つ け る 。

expect_after [expect_args] は 、 expect_before と 同 様 の 動 き を す る が 、 expectexpect_after の 両 方 に マ ッ チ し た 場 合 、 expect の パ タ ー ン が 使 用 さ れ る 点 が 異 な る 。 よ り 詳 し い 情 報 は 、 expect_before コ マ ン ド の 項 を 参 照 の こ と 。
expect_background
[expect_args] は 、 expect と 同 じ 引 数 を と る が 、 そ の 場 で 復 帰 す る 。 パ タ ー ン は 新 し い デ ー タ が 届 く た び に チ ェ ッ ク さ れ る 。 パ タ ー ン timeoutdefault は 、 expect_background に は 、 意 味 が な い し 、 無 視 さ れ る 。 expect と 同 様 に 、 expect_background コ マ ン ド は expect_beforeexpect_after パ タ ー ン を 使 え る 。

expect_background ア ク シ ョ ン が 、 評 価 さ れ る 時 、 同 じ spawn id を 持 つ バ ッ ク グ ラ ウ ン ド プ ロ セ ス は ブ ロ ッ ク さ れ る 。 ア ク シ ョ ン が 完 了 す る と 、 プ ロ セ ス が ア ン ブ ロ ッ ク さ れ る 。 バ ッ ク グ ラ ウ ン ド プ ロ セ ス が ブ ロ ッ ク さ れ て い る 間 は 、 (フ ォ ア グ ラ ウ ン ド の ) expect で 、 同 じ spawn id に 接 続 す る こ と が で き る 。 逆 に 、 expect_background が ブ ロ ッ ク さ れ て い な い 間 は expect す る こ と が で き な い 。 特 定 の spawn id へ の expect_background は 、 同 一 spawn id へ の 新 し い expect_background を 指 定 す る と 削 除 さ れ る 。 パ タ ー ン を つ け な い expect_background を 指 定 す る こ と で 、 バ ッ ク グ ラ ウ ン ド で パ タ ー ン マ ッ チ さ せ る こ と を や め さ せ ら れ る 。

expect_before [expect_args]expect と 同 じ 引 数 を と る が 、 そ の 場 で 復 帰 す る 。 も っ と も 最 近 、 同 じ spawn id に 対 し て expect_before で 使 わ れ た パ タ ー ン ・ ア ク シ ョ ン の ペ ア が 、 続 く expect コ マ ン ド に 対 し て 使 用 さ れ る 。 パ タ ー ン が マ ッ チ す る と 、 expect コ マ ン ド に マ ッ チ し た 時 と 同 じ よ う に 動 作 す る 。 処 理 は 、 そ の expect の コ ン テ キ ス ト で 行 な わ れ る 。 expect_beforeexpect の 両 方 の パ タ ー ン に マ ッ チ し た 場 合 、 expect_before の パ タ ー ン が 使 わ れ る 。 パ タ ー ン が 指 示 さ れ な か っ た 場 合 、 spawn id は ど の パ タ ー ン で も チ ェ ッ ク さ れ な い 。

−i フ ラ グ を さ ら に 指 定 し な い 限 り 、 expect_before パ タ ー ン は 、 expect_before が 実 行 さ れ た 時 に 定 義 さ れ た パ タ ー ン に マ ッ チ す る 。

−info フ ラ グ は expect_before か ら 、 マ ッ チ パ タ ー ン の 現 在 の 状 態 を 復 帰 さ せ る 。 デ フ ォ ル ト で は 、 現 在 の spawn id に 報 告 す る 。 オ プ シ ョ ン の spawn id を 指 定 す る こ と も で き る 。 例 え ば 、

expect_before -info -i $proc た っ た 一 つ の spawn id 指 定 だ け が 許 さ れ る 。 −indirect フ ラ グ で 、 直 接 spawn id を 抑 止 し 、 間 接 的 な 指 定 か ら 得 ら れ る idを 指 示 す る 。

spawn id を 指 示 す る 代 わ り に 、 "-all"フ ラ グ を 使 っ て 、 全 て の spawn id に "-info" の 報 告 を さ せ る こ と が で き る 。

−info フ ラ グ を 使 っ た 時 の 出 力 結 果 は 、 expect_before へ の 引 数 と し て 再 利 用 で き る 。

expect_tty [expect_args] は 、 expect と 似 た 動 き を す る が 、 文 字 列 を /dev/tty (す な わ ち 、 ユ ー ザ ー か ら の キ ー 入 力 ) か ら 読 み 込 む 。 デ フ ォ ル ト で は 、 cooked mode で 読 み 込 ま れ る の で 、 行 は リ タ ー ン で 終 ら な け れ ば な ら な い 。 そ う し な い と expect が 読 め な い 。 こ の 動 き は 、 stty を 使 っ て 変 え ら れ る 。 (下 の stty コ マ ン ド を 参 照 )
expect_user
[expect_args]expect と 似 た 動 き を す る が 、 文 字 列 を stdin(す な わ ち 、 ユ ー ザ ー か ら の キ ー 入 力 ) か ら 読 み 込 む 。 デ フ ォ ル ト で は 、 cooked mode で 読 み 込 ま れ る の で 、 行 は リ タ ー ン で 終 ら な け れ ば な ら な い 。 そ う し な い と expect が 読 め な い 。 こ の 動 き は 、 stty を 使 っ て 変 え ら れ る 。 (下 の stty コ マ ン ド を 参 照 )

fork は 、 新 し い プ ロ セ ス を 作 る 。 こ の 新 し い プ ロ セ ス は 、 現 在 の

Expect

ロ セ ス の 正 確 な コ ピ ー で あ る 。 成 功 す る と fork は 新 し い (子 )プ ロ セ ス に 0 を 返 し 、 親 プ ロ セ ス に 子 プ ロ セ ス の プ ロ セ ス IDを 返 す 。 失 敗 す る (ス ワ ッ プ 、 メ モ リ な ど の リ ソ ー ス 不 足 か ?)と 、 fork は 、 親 プ ロ セ ス に −1 を 返 す 。 新 し い 子 プ ロ セ ス は 作 成 さ れ な い 。 フ ォ ー ク さ れ た プ ロ セ ス は 、 exit コ マ ン ド で ext で き る 。 元 の プ ロ セ ス と 同 様 で あ る 。 フ ォ ー ク さ れ た プ ロ セ ス は ロ グ フ ァ イ ル を 作 っ て も 良 い 。 多 く の プ ロ セ ス で デ バ ッ グ も ロ グ も で き な け れ ば 、 結 果 、 混 乱 す る だ け で あ る 。

pty の イ ン プ リ メ ン テ ー シ ョ ン の 中 に は 、 複 数 の 読 み 手 と 書 き 手 が 一 瞬 で も あ れ ば 、 混 乱 す る も の が あ る 。 そ れ で 、 プ ロ セ ス を spawn す る 前 に は fork し て お く の が 一 番 安 全 で あ る 。

interact [string1 body1] ... [stringn [bodyn]] は 、 現 プ ロ セ ス の 制 御 を ユ ー ザ ー に 渡 す 。 結 果 、 現 プ ロ セ ス に 送 ら れ た キ ー ス ト ロ ー ク と 現 プ ロ セ ス の 標 準 出 力 と 標 準 エ ラ ー 出 力 が 復 帰 す る 。

string と body の 組 が 、 引 数 と し て 指 示 で き る 。 (デ フ ォ ル ト で は 、 文 字 列 は 現 プ ロ セ ス に は 送 ら れ な い ) 最 後 の body が な い と 、 interpreter コ マ ン ド が 実 行 さ れ る 。

interact コ マ ン ド 全 体 へ の 引 数 が 一 行 に 収 ま ら な い 場 合 、 "brace"す る こ と で 各 行 の 終 り に バ ッ ク ス ラ ッ シ ュ を 入 れ る の を 避 け る こ と が で き る 。 こ の 場 合 、 Tcl の 展 開 は ブ レ ー ス し て あ っ て も 起 こ る 。 例 え ば 、 以 下 の コ マ ン ド は 続 く string body の 組 と 対 話 す る 。 : ^Z が 押 さ れ る と Expect は サ ス ペ ン ド す る 。 ( −reset フ ラ グ は 、 端 末 モ ー ド を 復 旧 さ せ る 。 ) ^A が 押 さ れ る と 、 ユ ー ザ ー に は "you typed a control-A"が 返 る 。
$ が 押 さ れ る と 、 ユ ー ザ ー に は 日 付 が 返 る 。 ^C が 押 さ れ る と 、 Expect は 、 exit す る 。 "foo"が 入 力 さ れ る と 、 ユ ー ザ ー に "bar" が 返 る 。 ~~ が 押 さ れ る と 、 Expect イ ン タ プ リ タ は 、 対 話 モ ー ド に な る 。

set CTRLZ \032
interact {
-reset $CTRLZ {exec kill −STOP [pid]}
\001 {send_user "you typed a control−A\n";
send "\001" }
$ {send_user "The date is [exec date]."}
\003 exit
foo {send_user "bar"}
~~ }

string と body の 組 で 、 string が 引 数 と し て 並 べ ら れ た 順 に 比 較 さ れ る 。 部 分 的 に マ ッ チ し た 文 字 列 は 、 残 り が 到 着 す る ま で 送 ら れ て 来 な い 。 何 文 字 か さ ら に 打 ち 込 ま れ て 、 マ ッ チ が 可 能 に な る と 、 今 の マ ッ チ を 判 断 す る た め に だ け 使 わ れ て 他 の マ ッ チ を 始 め る こ と は し な い 。 そ れ ゆ え 、 部 分 的 に マ ッ チ し て い る 文 字 列 の マ ッ チ が 完 了 す る の は 遅 れ る こ と が あ る 。 部 分 的 に は マ ッ チ す る が 最 終 的 に は マ ッ チ し な い 文 字 列 の 場 合 な ど で あ る 。 デ フ ォ ル ト で は 、 ワ イ ル ド カ ー ド を 含 ま な い マ ッ チ は 、 exactと な る 。 ( expect コ マ ン ド が デ フ ォ ル ト で グ ロ ブ ス タ イ ル の パ タ ー ン を 用 い る の と は 対 照 的 に 。 ) −ex フ ラ グ は 、 パ タ ー ン を プ ロ テ ク ト す る の に 使 え る 。 interact フ ラ グ が そ う す る よ う に 。 パ タ ー ン が "-"で 始 ま る 場 合 、 こ の 方 法 で 保 護 で き る 。 ("-"で 始 ま る 文 字 列 は 全 て 将 来 の オ プ シ ョ ン と し て 予 約 さ れ て い る 。 )

−re フ ラ グ は 、 正 規 表 現 ス タ イ ル の パ タ ー ン と し て 文 字 列 を 解 釈 す る 。 こ の 場 合 、 マ ッ チ し た 部 分 文 字 列 は interact_out に 保 存 さ れ る 。 expect が 、 そ の 出 力 を 変 数 expect_out に 保 存 す る の と 似 た よ う な も の で あ る 。 −indices フ ラ グ も 同 じ よ う に サ ポ ー ト さ れ る 。 パ タ ー ン eof は 、 end-of-file に マ ッ チ し た 場 合 に ア ク シ ョ ン を 実 行 す る 。 複 数 に 分 か れ た eof パ タ ー ン に は −output フ ラ グ が 続 い て も 良 い 。 そ の 場 合 、 出 力 が 書 か れ て い る 間 に eof が 検 出 さ れ る と ア ク シ ョ ン を 実 行 す る 。 eof の デ フ ォ ル ト ア ク シ ョ ン は "return"で あ る 。 そ れ で 、 interact は 、 EOF を 見 つ け る と 復 帰 す る 。

timeout パ タ ー ン は 、 (秒 で 表 現 さ れ た )タ イ ム ア ウ ト に マ ッ チ し 、 ア ク シ ョ ン を 実 行 す る 。 timeout パ タ ー ン は 、 最 後 に 指 示 さ れ た プ ロ セ ス に 適 用 さ れ る 。 タ イ ム ア ウ ト に は デ フ ォ ル ト の 値 は な い 。 (expect内 で 使 わ れ る )特 殊 な 変 数 "timeout"は 、 こ の タ イ ム ア ウ ト と 関 係 し な い 。 例 え ば 、 以 下 の 記 述 は 一 時 間 以 上 タ イ プ し な か っ た ユ ー ザ ー を 自 動 的 に ロ グ ア ウ ト さ せ る 。 そ の 前 に シ ス テ ム か ら 頻 繁 に メ ッ セ ー ジ を 受 け と る :

interact -input $user_spawn_id timeout 3600 return -output \
$spawn_id パ タ ー ン null と nulls は 、 ( remove_nulls コ マ ン ド を 通 し て )、 ア ス キ ー の 0 に マ ッ チ し た 場 合 に ア ク シ ョ ン を 実 行 す る 。 glob や regexp で 0 バ イ ト に マ ッ チ さ せ る こ と は で き な い 。 こ の パ タ ー ン の 前 に −iwrite フ ラ グ を つ け る と 、 変 数 interact_out(spawn_id) に パ タ ー ン (あ る い は eof)に マ ッ チ し た spawn_id が 設 定 さ れ る 。

breakcontinue と い っ た ア ク シ ョ ン は 、 制 御 構 造 (す な わ ち 、 forproc )の 中 で 、 通 常 通 り に 動 く 。 し か し 、 return は 、 interact を 呼 出 元 に 復 帰 さ せ る 。 一 方 、 inter_return は 、 interact を そ の 呼 び だ し 元 内 に 復 帰 さ せ る 。 例 え ば 、 "proc foo" は interact を 呼 ぶ 。 interact が 、 さ ら に 、 inter_return を 実 行 す る と proc foo が 復 帰 す る 。 (こ れ は 、 interact が 、 interpreter を 呼 ん で return と タ イ プ す る と 、 そ の interactは 継 続 す る が 、 inter_return す る と 、 そ の 呼 出 元 に 復 帰 し て し ま う と い う こ と で あ る 。 )

interact の 間 raw モ ー ド が 使 用 さ れ る の で 、 全 て の 文 字 が 現 プ ロ セ ス に 渡 さ れ る 。 現 プ ロ セ ス が ジ ョ ブ コ ン ト ロ ー ル シ グ ナ ル を 捕 ま え な け れ ば 、 ス ト ッ プ シ グ ナ ル (デ フ ォ ル ト ^Z)で 停 止 す る 。 再 ス タ ー ト す る に は 、 制 御 シ グ ナ ル を 送 る 。 ("kill −CONT <pid>"と か 打 っ て )。 本 当 に SIGSTOP を プ ロ セ ス に 送 り た い な ら 、 csh を spawn し て そ の 上 で プ ロ セ ス を 起 動 す る こ と 。 そ う で な く て 、 Expect そ の も の に SIGSTOP を 送 り た い な ら 、 イ ン タ プ リ タ を 呼 び 出 し て (普 通 は エ ス ケ ー プ 文 字 )、 そ の 後 ^Z を 打 つ こ と 。

string bodyの ペ ア は 、 イ ン タ プ リ タ に 入 っ て コ マ ン ド を 対 話 的 に 実 行 す る の を 避 け る こ と を 簡 単 に 書 く の に 使 わ れ る 。 前 の 端 末 モ ー ド が 、 そ の body を 実 行 す る 間 使 用 さ れ る 。 実 行 速 度 を 上 げ る に は 、 デ フ ォ ル ト で ア ク シ ョ ン が raw モ ー ド で 動 く よ う に す る 。 −reset フ ラ グ は 、 端 末 の 持 っ て い る モ ー ド を リ セ ッ ト す る 。 そ う し な け れ ば 、 そ の 前 に 行 な っ た interact コ マ ン ド の 端 末 モ ー ド (cooked モ ー ド と か )が 保 持 さ れ る 。 モ ー ド が 切 り 替 わ っ た 時 に 、 そ れ ま で 打 っ て い た 文 字 が 消 え て し ま う こ と が あ る の で 注 意 す る こ と 。 (シ ス テ ム に よ っ て は 、 そ う い う 不 幸 な 仕 様 を し た 端 末 ド ラ イ バ が 動 い て い る 。 ) −reset を 使 う の は 、 ア ク シ ョ ン が cooked モ ー ド で し か 動 か な い 場 合 だ け で あ る 。

−echo フ ラ グ は 、 一 文 字 づ つ パ タ ー ン に マ ッ チ す る 文 字 を 返 す 。 こ れ は 、 ユ ー ザ ー が 打 つ 文 字 に 部 分 的 に マ ッ チ し な け れ ば な ら な い 場 合 に 有 効 で あ る 。 パ タ ー ン は エ コ ー さ れ た が マ ッ チ に は 失 敗 し た 場 合 、 文 字 列 は 、 spawn さ れ た プ ロ セ ス に 送 ら れ る 。 そ れ か ら 、 spawn さ れ た プ ロ セ ス が 文 字 列 を 表 示 し 、 ユ ー ザ ー は 文 字 列 を 二 度 見 る 。 −echo は 、 ユ ー ザ ー が パ タ ー ン を 完 成 さ せ て く れ そ う も な い 場 合 に だ け 有 効 で あ ろ う 。 例 え ば 、 以 下 は rftp(リ カ ー シ ブ ftp ス ク リ プ ト )か ら の 抜 粋 だ が 、 ユ ー ザ ー が ~g, ~p, ~l を 打 つ と カ レ ン ト デ ィ レ ク ト リ か ら 再 帰 的 (リ カ ー シ ブ )に get, put, list す る 。 通 常 の ftp で は こ れ ら の 操 作 が で き な い 。 間 違 っ て ~ を 打 つ か 、 ~ の 後 を 間 違 え た 場 合 、 そ の 文 字 列 を 無 視 す る よ う に な っ て い る 。

interact {
-echo ~g {getcurdirectory 1}
-echo ~l {getcurdirectory 0}
-echo ~p {putcurdirectory} }

−nobuffer フ ラ グ は 、 文 字 が 読 ま れ る 度 に 、 そ の 文 字 を マ ッ チ へ 送 る 。 こ の フ ラ グ は 、 パ タ ー ン を エ コ ー バ ッ ク す る 時 に 有 効 で あ る 。 例 え ば 、 以 下 は 誰 か が (ヘ イ ズ モ デ ム を )ダ イ ア ル す る の を 監 視 す る の に 使 わ れ る 。 "atd"が 見 え る 度 に ス ク リ プ ト が 残 り の ラ イ ン を ロ グ す る 。

proc lognumber {} {
interact -nobuffer -re "(.*)\r" return
puts $log "[exec date]: dialed $interact_out(1,string)" }

interact -nobuffer "atd" lognumber

interact の 間 、 前 に 使 っ た log_user は 無 視 さ れ る 。 特 に 、 interact は 、 そ の 出 力 を 記 録 さ れ る (標 準 出 力 に 送 ら れ る )。 と い う の は 、 ユ ー ザ ー は エ コ ー バ ッ ク の な い 状 態 で キ ー を 打 ち た く は な い だ ろ う と 考 え る か ら で あ る 。

−o フ ラ グ は 、 現 プ ロ セ ス の 出 力 に key body ペ ア の key を 結 び つ け る 。 こ ん な 場 合 に 便 利 で あ る 。 例 え ば 、 telnet セ ッ シ ョ ン 中 に 望 ま な い 文 字 を 送 っ て く る ホ ス ト を 扱 う 場 合 で あ る 。 デ フ ォ ル ト で は 、 interact は 、 ユ ー ザ ー が Expect プ ロ セ ス 自 身 の 標 準 入 力 に 書 き 込 み 、 標 準 出 力 を 見 て い る と 思 っ て い る 。 −u フ ラ グ ("user"の u)は interact に 、 引 数 で 付 け ら れ た 名 前 (spawned id で あ る )の プ ロ セ ス を ユ ー ザ ー と し て 扱 う 。 こ れ に よ り 、 変 な ル ー プ な し に 2つ の 無 関 係 な プ ロ セ ス を 結 合 さ せ る こ と が で き る 。 デ バ ッ グ す る 時 の 助 け と し て 、 Expect は 常 に 診 断 結 果 を stderr へ 送 る 。 (あ る 種 の ロ グ と デ バ ッ グ 情 報 は stdout に 送 ら れ る )。 同 じ 理 由 で 、 interpreter コ マ ン ド は 、 stdin か ら デ ー タ を 読 む 。 例 え ば 、 以 下 の 断 片 は ロ グ イ ン プ ロ セ ス を 作 る 。 そ し て 、 (表 示 さ れ な い ) ユ ー ザ ー に ダ イ ア ル し 、 両 方 の 接 続 を 行 な う 。 も ち ろ ん 、 loginを ど ん な プ ロ セ ス に 変 え て も 良 い 。 例 え ば 、 シ ェ ル な ら 、 ア カ ウ ン ト と パ ス ワ ー ド を 与 え な く て も ユ ー ザ ー が 起 動 で き る 。

spawn login
set login $spawn_id
spawn tip modem
# dial back out to user
# connect user to login
interact −u $login 複 数 の プ ロ セ ス へ の 出 力 を 行 な う た め 、 −output フ ラ グ を 前 に つ け た 各 spawn id の セ ッ ト が リ ス ト さ れ る 。 出 力 spawn id の 組 へ の 入 力 は 、 −input フ ラ グ に よ っ て 決 定 さ れ る 。 ( −input−output フ ラ グ は 両 方 と も expect コ マ ン ド の −i フ ラ グ と 同 じ 書 式 で あ る 。 ( interact 内 の any_spawn_id は 意 味 が な い 点 を 除 く 。 ) 以 下 の フ ラ グ と 文 字 列 (あ る い は パ タ ー ン )は 全 て 、 別 の -input フ ラ グ が 現 れ る ま で こ の 入 力 を 適 用 す る 。 −input が 現 れ な か っ た 場 合 、 −output は "−input $user_spawn_id −output" を 行 な う 。 ( −input を 持 た な い パ タ ー ン も 同 様 で あ る 。 ) −input が 一 つ だ け 指 示 さ れ る と 、 $user_spawn_id は そ の 値 で 置 き 換 わ る 。 二 つ め の −input が 指 示 さ れ る と 、 $spawn_id が 置 き 換 わ る 。 以 降 の −input フ ラ グ も 指 定 で き る 。

2つ の 入 力 プ ロ セ ス は デ フ ォ ル ト で $spawn_id と $user_spawn_id に 出 力 さ れ る 。 も し 、 −input フ ラ グ が −output フ ラ グ な し で 指 定 さ れ た 場 合 、 プ ロ セ ス か ら の 文 字 は 捨 て ら れ る 。

−i フ ラ グ は 、 現 在 の spawn_id を 書 き 換 え る 。 た だ し 、 −input ま た は −output フ ラ グ が 使 わ れ て い な い 場 合 で あ る 。 −i フ ラ グ は −o フ ラ グ を 含 む 。 間 接 spawn id を 使 っ て 会 話 し て い る プ ロ セ ス を 切 替 え る こ と が 可 能 で あ る 。 (間 接 spawn id は 、 expect コ マ ン ド の 項 で 説 明 し た ) 間 接 spawn id は 、 -i, -u, -input, -output フ ラ グ で 指 定 で き る 。

interpreter [args] は 、 ユ ー ザ ー に Expect と Tcl コ マ ン ド の た め の プ ロ ン プ ト を 表 示 す る 。 各 コ マ ン ド の 結 果 が 表 示 さ れ る 。

breakcontinue は 制 御 構 造 (す な わ ち 、 for proc )で 、 通 常 通 り に 動 く 。 し か し 、 return は 、 呼 出 元 へ の 復 帰 を 行 な う の に 対 し 、 inter_returninterpreter を 、 呼 出 元 を 復 帰 さ せ る 。 た と え ば 、 "proc foo" は 、 interpreter を 呼 び 、 inter_return を 実 行 し proc foo が 復 帰 す る 。 他 の コ マ ン ド は interpreter に 新 し い コ マ ン ド の た め の プ ロ ン プ ト を 表 示 し 続 け る 。 デ フ ォ ル ト で は 、 プ ロ ン プ ト は 2 つ の 整 数 を 含 ん で い る 。 最 初 の 数 は 評 価 ス タ ッ ク の 深 さ (つ ま り 、 何 回 Tcl_Eval が 呼 ば れ た か ) 2番 め の 数 は 、 Tcl ヒ ス ト リ 識 別 番 号 で あ る 。 プ ロ ン プ ト は "prompt1"と 呼 ば れ る プ ロ シ ジ ャ を 定 義 す る こ と で 設 定 で き る 。 こ の プ ロ シ ジ ャ の 帰 り 値 が 次 の プ ロ ン プ ト と な る 。 記 述 に 開 き ク オ ー ト 、 括 弧 、 ブ レ ー ス 、 ブ ラ ケ ッ ト が あ る と 、 次 の 行 に は 第 2 プ ロ ン プ ト が 現 れ る (デ フ ォ ル ト は "+> ")。 第 2 プ ロ ン プ ト は "prompt2"と 呼 ば れ る プ ロ シ ジ ャ を 定 義 す る こ と で 設 定 で き る 。

interpreter の 間 は 、 呼 出 元 が raw モ ー ド で あ っ た と し て も 、 cooked モ ー ド が 使 わ れ る 。

stdin が 閉 じ ら れ る と 、 interpreter−eof フ ラ グ が 使 わ れ て い な い 限 り 復 帰 す る 。 使 わ れ て い る 場 合 は 引 き 続 く 引 数 を 実 行 す る 。

log_file [args] [[−a] file] フ ァ イ ル 名 が 与 え ら れ る と 、 log_file は 、 (現 時 点 か ら の )セ ッ シ ョ ン の ロ グ を そ の フ ァ イ ル に 採 取 す る 。 引 数 が な け れ ば 、 log_file は 記 録 を や め る 。 使 っ て い た ロ グ フ ァ イ ル は ク ロ ー ズ さ れ る 。 フ ァ イ ル 名 の 代 わ り に 、 Tcl フ ァ イ ル 識 別 子 を 指 定 す る と 、 −open−leaveopen フ ラ グ が 使 え る 。 spawn コ マ ン ド と 同 様 だ (よ り 詳 し く は 、 spawn を 参 照 )

−a フ ラ グ は 、 log_user コ マ ン ド に よ っ て 抑 止 さ れ た ロ グ に 出 力 を 強 制 す る も の で あ る 。 デ フ ォ ル ト で は 、 log_file コ マ ン ド は 古 い 記 録 を 消 し て 書 き 直 し た り せ ず に 追 記 す る 。 ロ グ オ フ や 複 数 の ロ グ を 書 く 時 に 都 合 が 良 い よ う に 。 フ ァ イ ル を 消 し て 書 き 直 す 時 は −noappend フ ラ グ を 使 う 。

-info フ ラ グ は 、 最 後 に ロ グ し た 内 容 を 返 す (最 後 が -infoフ ラ グ 付 き だ っ た ら 、 そ の 前 の 内 容 )。

log_user -info|0|1 デ フ ォ ル ト で は 、 send/expect ダ イ ア ロ グ は 標 準 出 力 に ロ ギ ン グ さ れ る 。 (開 い て い れ ば ロ グ フ ァ イ ル に も ロ ギ ン グ さ れ る 。 ) "log_user 0"と す る と 、 標 準 出 力 へ の ロ ギ ン グ が 抑 止 さ れ る 。 "log_user 1"と す る と 、 復 旧 す る 。 ロ グ フ ァ イ ル へ の 記 録 に つ い て は 変 更 は な い 。

-info フ ラ グ は 、 最 後 に ロ グ し た 内 容 を 返 す (最 後 が -info フ ラ グ 付 き だ っ た ら 、 そ の 前 の 内 容 )。

match_max [−d] [−i spawn_id] [size] は 、 バ ッ フ ァ サ イ ズ を (バ イ ト 単 位 で )定 義 す る 。 こ の バ ッ フ ァ は 、 expect の 内 部 で 使 わ れ る 。 引 数 size が な い と 、 現 在 の サ イ ズ を 復 帰 す る 。

−d フ ラ グ を 指 示 す る と 、 デ フ ォ ル ト サ イ ズ が 設 定 さ れ る 。 (初 期 状 態 の デ フ ォ ル ト 値 は 2000。 ) −i フ ラ グ を 指 示 す る と 、 名 前 つ き spawn id に 対 し て サ イ ズ が 設 定 さ れ る 。 指 定 し な け れ ば 、 カ レ ン ト プ ロ セ ス に 対 し て 設 定 さ れ る 。

overlay [−# spawn_id] [−# spawn_id] [...] program [args] は 、 program args を 現 在 の Expect プ ロ グ ラ ム 上 で 実 行 す る 。 現 在 の Expect プ ロ グ ラ ム は 終 了 す る 。 た だ の ハ イ フ ン が 引 数 に 指 定 さ れ る と 、 コ マ ン ド 名 の 前 に ハ イ フ ン を つ け て ロ グ イ ン シ ェ ル と し て 扱 う 。 全 て の ク ロ ー ズ 中 の spawn_id は 、 引 数 に 使 わ れ た 文 字 列 を 待 つ 。

Spawn_id は 、 新 し い プ ロ グ ラ ム に 継 承 さ せ る た め の フ ァ イ ル ID に マ ッ プ さ れ る 。 例 え ば 、 以 下 の 行 は チ ェ ス を 行 な い 、 chess master と い う 現 プ ロ セ ス に 制 御 さ せ る 。

overlay −0 $spawn_id −1 $spawn_id −2 $spawn_id chess こ れ は 、 "interact −u" と す る よ り も 効 果 的 で あ る 。 し か し 、 Expect プ ロ セ ス が 制 御 し て い な い の で プ ロ グ ラ ム 能 力 が 犠 牲 と な る 。 制 御 さ れ な い 端 末 が で き て し ま う こ と に 注 意 す る こ と 。 そ れ で 、 disconnect す る か 標 準 入 力 を リ マ ッ プ す る と ジ ョ ブ 制 御 プ ロ グ ラ ム (シ ェ ル 、 ロ グ イ ン な ど )が 正 し く 機 能 し な い 。

parity [−d] [−i spawn_id] [value] は 、 spawn idの 出 力 か ら パ リ テ ィ を 保 持 す る か 取 り 除 く か を 設 定 す る 。 value が 0 で あ れ ば 、 パ リ テ ィ は 取 り 除 か れ る 。 そ れ 以 外 の 場 合 、 取 り 除 か れ な い 。 value が 指 定 さ れ な い 場 合 、 現 在 の 値 が 復 帰 す る 。

−d フ ラ グ は 、 パ リ テ ィ の デ フ ォ ル ト 値 を 設 定 す る 。 (イ ニ シ ャ ル 時 の デ フ ォ ル ト 値 は 1 で あ る 。 す な わ ち 、 パ リ テ ィ が 取 り 除 か れ る 。 ) −i フ ラ グ を 指 示 す る と 、 パ リ テ ィ の 値 が 引 数 の 名 前 つ き の spawn id に 対 し て 設 定 さ れ る 。 引 数 が な け れ ば 現 在 の プ ロ セ ス に 対 し て 設 定 さ れ る 。

remove_nulls [−d] [−i spawn_id] [value] は 、 前 に パ タ ー ン マ ッ チ し た あ る い は expect_outinteract_out に 保 存 さ れ て い る spawn さ れ た プ ロ セ ス の 出 力 か ら ヌ ル を 保 持 す る か 取 り 除 く か を 設 定 す る 。 value が 1 な ら 、 ヌ ル は 取 り 除 か れ る 。 も し 、 value が 0 な ら 、 ヌ ル は 取 り 除 か れ る 。 value が な け れ ば 、 現 在 の 値 が 復 帰 す る 。

−d フ ラ グ は 、 デ フ ォ ル ト 値 を 設 定 す る 。 (イ ニ シ ャ ル の デ フ ォ ル ト 値 は 、 1 で あ る 。 そ れ ゆ え 、 ヌ ル は 取 り 除 か れ る 。 ) −i フ ラ グ は 、 名 前 つ き の spawn id に 対 し て 値 を 設 定 す る 。 な け れ ば 、 現 プ ロ セ ス に 対 し て 設 定 す る 。 ヌ ル を 取 り 除 く か ど う か に よ ら ず 、 Expect は 、 ロ グ と 標 準 出 力 に は ヌ ル が 記 録 さ れ る 。

send [−flags] string

string を 現 プ ロ セ ス に 送 る 。 例 え ば 、 以 下 の コ マ ン ド :

send "hello world\r" は 、 文 字 h e l l o <blank> w o r l d <return> を 現 在 の プ ロ セ ス に 送 る 。 (Tcl は 、 printf に 似 た コ マ ン ド ( format と 呼 ば れ る )を 持 っ て い て 、 複 雑 な 文 字 列 を 組 み 立 て る こ と が で き る 。 ) 文 字 は 直 ち に 送 ら れ る 。 た だ し 、 入 力 に ラ イ ン バ ッ フ ァ の あ る プ ロ グ ラ ム で は 、 リ タ ー ン コ ー ド が 送 ら れ る ま で 文 字 が 読 ま れ な い 。 リ タ ー ン コ ー ド は 、 "\r"と 表 記 す る 。

−− フ ラ グ は 、 続 く 引 数 を フ ラ グ と 解 釈 せ ず 文 字 列 と し て 解 釈 さ れ る 。 全 体 と し て フ ラ グ に 見 え な く て も "−−"が 前 に つ い た 文 字 列 は フ ラ グ と し て 扱 わ れ て し ま う 。 こ の フ ラ グ は 処 理 さ れ て い な い 文 字 列 が フ ラ グ と し て 扱 わ れ る の を 防 ぐ 。 ("-"で 始 ま る 文 字 は 全 て 将 来 の オ プ シ ョ ン と し て 予 約 さ れ て い る 。 )

−i フ ラ グ は 、 名 前 つ き の spawn_id に 文 字 列 を 送 る こ と を 宣 言 す る 。 そ の spawn_id が user_spawn_id で あ れ ば 、 端 末 は raw モ ー ド に 入 り 、 文 字 列 中 の 改 行 が 復 帰 改 行 シ ー ケ ン ス に 変 換 さ れ る 。 そ れ で 、 外 か ら は 端 末 が cooked モ ー ド と な っ て い る よ う に 見 え る 。 −raw フ ラ グ は 、 こ の 変 換 を 抑 止 す る 。

−null フ ラ グ は 、 ヌ ル 文 字 を 送 る (0 バ イ ト )。 デ フ ォ ル ト で は 、 ヌ ル 文 字 を 1つ 送 る 。 −null に 続 く 整 数 は ヌ ル 文 字 を い く つ 送 る か を 指 示 す る 。

−break フ ラ グ は 、 ブ レ ー ク 状 態 を 作 る 。 spawn id が "spawn -open"で 指 示 し た tty デ バ イ ス を 参 照 す る 場 合 の み 意 味 が あ る 。 tip な ど の プ ロ セ ス を spawn す る 場 合 、 tip の 都 合 で ブ レ ー ク 状 態 を 作 る べ き で あ る 。

−s フ ラ グ は 、 出 力 を 強 制 的 に "遅 く "す る 。 結 果 、 コ ン ピ ュ ー タ が 打 ち 込 ん で い る バ ッ フ ァ に 人 間 が 打 ち 込 ん で し ま う 状 況 を 避 け る こ と が で き る 。 こ の 出 力 は 変 数 "send_slow"の 値 で 制 御 さ れ る 。 こ の 変 数 は 二 つ の 要 素 を 持 つ リ ス ト で あ る 。 最 初 の 要 素 は 、 ア ト ミ ッ ク に 送 る バ イ ト 数 で あ る 。 2 番 め の 要 素 は ア ト ミ ッ ク に 送 る 間 隔 (秒 )で あ る 。 例 え ば 、 "set send_slow {10 .001}" は "send −s" に 10 文 字 送 る 毎 に 1ミ リ 秒 待 つ よ う に 指 示 す る 。

−h フ ラ グ は 、 人 間 の 実 際 の 入 力 に 似 せ て send を 行 な う 。 (ア ル ゴ リ ズ ム は 、 Weibull distribution に 基 づ い て い て 、 こ の 特 定 の ア プ リ ケ ー シ ョ ン Expect? に 合 わ せ る た め の 修 正 が 行 な わ れ て い る 。 ) こ の 出 力 は 変 数 "send_human"の 値 で 制 御 さ れ て い て 、 こ の 変 数 は 5 つ の 要 素 か ら な る リ ス ト で 最 初 の 2 つ の 要 素 は 文 字 間 の 平 均 イ ン タ ー バ ル 時 間 (秒 )で あ る 。 1 つ め が デ フ ォ ル ト 値 で 、 2 つ め が (通 常 発 生 す る 微 妙 な 待 ち 時 間 を 表 現 す る ) 単 語 の 終 り の 値 で あ る 。 3 つ め の 要 素 は 変 動 率 で あ る 。 可 能 な 値 は 0 か ら 無 限 大 で あ る 。 最 後 の 2 つ の パ ラ メ タ は 、 そ れ ぞ れ 、 イ ン タ ー バ ル 時 間 の 最 小 値 と 最 大 値 で あ る 。 こ の 2 つ の 値 は 最 後 に 使 わ れ て 、 最 終 時 刻 を ク リ ッ プ す る 。 こ の 2 値 が 違 う と 究 極 の 平 均 は 与 え ら れ た 平 均 と は 、 全 く 違 っ た も の に な る 。 例 と し て 、 続 く コ マ ン ド が 一 定 の 速 度 で 速 く 打 つ タ イ ピ ス ト を エ ミ ュ レ ー ト す る :

set send_human {.1 .3 1 .05 2}
send −h "I’m hungry. Let’s do lunch." ハ ン グ さ せ て し ま っ た 後 は 、 以 下 の よ う に し た 方 が 良 い だ ろ う 。 :

set send_human {.4 .4 .2 .5 100}
send −h "Goodd party lash night!"

send に エ ラ ー や 修 正 を 埋 め 込 ん で あ っ て も 、 エ ラ ー は シ ミ ュ レ ー ト さ れ な い 点 に 注 意 す る こ と 。 ブ レ ー ク を 送 る た め や 、 ゆ っ く り し た 出 力 を 行 な っ た り 、 人 間 が 出 力 し た よ う に 見 せ か け る た め に ヌ ル 文 字 を 送 る フ ラ グ は 相 互 排 他 さ れ る 。 最 後 に 指 定 さ れ た も の だ け が 使 わ れ る 。 そ れ 以 上 は 、 string の 引 数 が 、 ヌ ル 文 字 あ る い は ブ レ ー ク を 送 る フ ラ グ と し て 指 定 で き る 。 最 初 の send よ り 前 に expect を 置 い た 方 が 良 い 。 expect は 、 プ ロ セ ス が 始 ま る の を 待 て る が 、 send は 待 て な い 。 特 に 、 最 初 の send は 、 プ ロ セ ス が 走 り 始 め る 前 に 完 了 す る 。 あ な た の デ ー タ が 無 視 さ れ る 危 険 が あ る 。 最 初 に プ ロ ン プ ト を 表 示 し な い よ う な 対 話 的 な プ ロ グ ラ ム で は 、 次 の よ う に send の 前 に デ ィ レ イ を つ け る こ と が で き る :

# ど の よ う に 破 る か の ヒ ン ト を ハ ッ カ ー に 与 え て し ま わ な い よ う に 、
# こ の シ ス テ ム で は 外 部 の パ ス ワ ー ド に 対 す る プ ロ ン プ ト を 提 供 し な い 。
# exec が 完 了 す る の を 5 秒 待 て 。
spawn telnet very.secure.gov
sleep 5
send password\r

exp_sendsend の エ イ リ ア ス で あ る 。 あ な た が Expectk か 、 Tk 環 境 で 動 く Expect の 他 の 変 種 を 使 っ て い る 場 合 、 send は 、 全 く 異 な っ た 目 的 の た め に 使 わ れ て い る 。 exp_send が 、 両 環 境 の 間 で の 互 換 性 の た め に 提 供 さ れ て い る 。 似 た よ う な エ イ リ ア ス が 他 の Expect の 他 の send コ マ ン ド の た め に 提 供 さ れ て い る 。

send_error [−flags] string

send と 似 た よ う な も の で 、 現 プ ロ セ ス で な く stderr に 出 力 さ れ る 。

send_log [−-] string

send と 似 た よ う な も の で 、 ロ グ フ ァ イ ル だ け に string を 送 る 。 ( log_file を 参 照 。 ) 引 数 は ロ グ フ ァ イ ル が open さ れ て い な け れ ば 無 視 さ れ る 。

send_tty [−flags] string

send と 似 た よ う な も の で 、 現 プ ロ セ ス で な く /dev/tty へ 出 力 を 送 る 。

send_user [−flags] string

send と 似 た よ う な も の で 、 現 プ ロ セ ス で な く 標 準 出 力 へ 出 力 を 送 る 。

sleep seconds は 、 与 え ら れ た 数 字 の 秒 数 だ け ス ク リ プ ト が ス リ ー プ す る 。 seconds は 、 10進 数 だ け が 許 さ れ る 。 (Expectk を 使 っ て い る 場 合 、 Tkの イ ベ ン ト と )割 り 込 み は 、 Expectが ス リ ー プ し て い る 間 も 処 理 さ れ る 。
spawn
[args] program [args]

program args を 走 ら せ る 新 し い プ ロ セ ス を 生 成 す る 。 そ の 標 準 入 力 と 標 準 出 力 は Expect に 結 び つ け ら れ る 。 そ れ で 、 他 の Expect コ マ ン ド で 読 ん だ り 書 い た り で き る 。 接 続 は close に よ っ て 、 あ る い は 、 プ ロ セ ス そ の も の が フ ァ イ ル ID の い ず れ か を ク ロ ー ズ し た 場 合 、 破 壊 さ れ る 。 プ ロ セ ス は spawn に よ っ て 始 め ら れ る 。 変 数 spawn_id に は 、 そ の プ ロ セ ス へ の 参 照 を 行 な う 識 別 子 が 設 定 さ れ る 。 spawn_id に よ っ て 記 述 さ れ る プ ロ セ ス は current process が 考 慮 さ れ る 。 spawn_id は 、 読 ん で も 書 い て も 良 く 、 効 果 的 な ジ ョ ブ 制 御 を 提 供 す る 。

user_spawn_id は ユ ー ザ ー を 参 照 す る 識 別 子 の 入 っ た グ ロ ー バ ル 変 数 で あ る 。 例 え ば 、 spawn_id が 、 こ の 値 に 設 定 さ れ た 場 合 、 expect は 、 expect_user の よ う な 動 き を す る 。

error_spawn_id は 、 標 準 エ ラ ー 出 力 を 参 照 す る 識 別 子 の 入 っ た グ ロ ー バ ル 変 数 で あ る 。 例 え ば 、 spawn_id が 、 こ の 値 に 設 定 さ れ た 場 合 、 send は 、 send_error の よ う な 動 き を す る 。

tty_spawn_id は 、 /dev/tty を 参 照 す る 識 別 子 の 入 っ た グ ロ ー バ ル 変 数 で あ る 。 /dev/tty が 存 在 し な い (cron, at, バ ッ チ ス ク リ プ ト の 中 )場 合 、 tty_spawn_id は 定 義 さ れ な い 。 以 下 の よ う に 確 認 す る こ と が で き る 。 :

if {[info vars tty_spawn_id]} {
# /dev/tty exists }
else {
# /dev/tty doesn’t exist
# probably in cron, batch, or at script }

spawn UNIX プ ロ セ ス ID を 復 帰 す る 。 spawn さ れ た プ ロ セ ス が な い 場 合 、 0 が 復 帰 す る 。 変 数 spawn_out(slave,name) は pty ス レ ー ブ デ バ イ ス の 名 前 に 設 定 さ れ る 。 デ フ ォ ル ト で は 、 spawn は コ マ ン ド 名 と 引 数 を エ コ ー す る 。 −noecho フ ラ グ で spawn が こ う す る の を 止 め ら れ る 。

−console フ ラ グ は 、 コ ン ソ ー ル へ の 出 力 を 起 こ し 、 spawn さ れ た プ ロ セ ス へ の リ ダ イ レ ク ト さ れ る 。 こ の 機 能 は 未 サ ポ ー ト の シ ス テ ム が あ る 。 内 部 的 に 、 spawn は pty を 使 い 、 ユ ー ザ ー の tty と 同 じ よ う に 初 期 化 さ れ る 。 こ れ は 、 か な り 初 期 化 し て し ま う の で 全 て の 設 定 が (stty(1)に よ る と ) "正 常 (sane)" に な る 。 変 数 stty_init が 定 義 さ れ て い る と 、 stty の 引 数 の 形 式 を 解 釈 で き る の で 、 よ り 詳 細 な 設 定 を 行 な え る 。 例 え ば 、 "set stty_init raw" は 、 以 降 spawn さ れ た プ ロ セ ス の 端 末 を raw モ ー ド で 開 始 す る 。 −nottycopy は 、 ユ ー ザ ー の tty に 基 づ い た 初 期 化 を 飛 ば す 。 −nottyinit は 、 "正 常 な "初 期 化 を 飛 ば す 。 普 通 、 spawn は 、 実 行 す る の に わ ず か の 時 間 し か か か ら な い 。 spawn に 時 間 を か け た い の で あ れ ば 、 お そ ら く 割 り 込 ま れ た pty に 遭 遇 す る だ ろ う 。 た く さ ん の テ ス ト が 間 違 っ た プ ロ セ ス に 掛 か り 合 う こ と を 避 け る こ と が で き る 。 (割 り 込 ま れ た pty に つ き 、 10 秒 か か る 。 ) −d オ プ シ ョ ン を つ け て Expect を 走 ら せ る と 、 Expect が お か し な 状 態 の た く さ ん の pty に 遭 遇 し て い る か ど う か が 表 示 さ れ る 。 こ れ ら の pty が つ な が っ て い る た め に プ ロ セ ス を 殺 せ な い 場 合 、 リ ブ ー ト す る し か 頼 れ る 復 旧 手 段 は な い 。

exec(2)が 失 敗 し て program が spawn に 成 功 し な か っ た 場 合 (例 え ば 、 program が な か っ た 場 合 な ど )、 エ ラ ー メ ッ セ ー ジ が 次 の interactexpect コ マ ン ド で 復 帰 す る 。 つ ま り 。 program が 、 出 力 と し て エ ラ ー メ ッ セ ー ジ を 出 し て い る よ う に 見 せ る 。 こ の 動 作 は 、 spawn の 実 装 の 自 然 な 帰 結 で あ る 。 内 部 で 、 spawn が フ ォ ー ク さ れ 、 そ の 後 、 spawn さ れ た プ ロ セ ス が オ リ ジ ナ ル の Expect プ ロ セ ス と そ の spawn_id で 会 話 を 行 な う 。

−open フ ラ グ は 、 次 の 引 数 を Tcl フ ァ イ ル 識 別 子 と し て 解 釈 す る (つ ま り 、 open を 行 な っ て 復 帰 す る 。 ) spawn id は 、 spawn さ れ た id と し て 使 わ れ る 。 (フ ァ イ ル 識 別 子 は 、 も う 使 う べ き で は な い 。 ) こ れ に よ り 、 pty を 除 く 、 raw デ バ イ ス 、 フ ァ イ ル 、 パ イ プ ラ イ ン を 使 う こ と が で き る 。 0 が 返 っ て く る の は 、 関 連 す る プ ロ セ ス が な か っ た 時 で あ る 。 spawn さ れ た プ ロ セ ス へ の 接 続 が ク ロ ー ズ さ れ る と 、 Tcl フ ァ イ ル 識 別 子 も ク ロ ー ズ さ れ る 。 −leaveopen フ ラ グ は 、 −open と 似 た 動 き を す る が 、 spawn id を ク ロ ー ズ し た 後 も フ ァ イ ル 識 別 子 を 開 い た ま ま に す る 点 が 違 う 。

−pty フ ラ グ は 、 pty を オ ー プ ン す る が プ ロ セ ス を spawnし な い 。 0 が 復 帰 す る の は 、 関 連 す る プ ロ セ ス が な い 場 合 で あ る 。 spawn_id は 、 通 常 通 り 設 定 さ れ る 。 変 数 spawn_out(slave,fd) に は 、 pty ス レ ー ブ と つ な が っ て い る フ ァ イ ル 識 別 子 が 設 定 さ れ る 。 "close -slave" で close で き る 。

−ignore フ ラ グ は 、 spawn さ れ た プ ロ セ ス 中 で 無 視 さ れ る シ グ ナ ル の 名 前 を 指 示 す る 。 な け れ ば 、 シ グ ナ ル は デ フ ォ ル ト の 振 舞 い を す る 。 シ グ ナ ル の 名 前 は trap コ マ ン ド で 使 う 名 前 と 同 じ で あ る 。 各 シ グ ナ ル を 分 離 す る の に フ ラ グ が 必 要 な 点 を 除 い て は 。

strace level は 、 以 降 の 命 令 を 実 行 す る 前 に 表 示 を 行 な う 。 (Tcl の trace は 、 変 数 の ト レ ー ス を 行 な う 。 ) level は 、 ト レ ー ス へ の 呼 び 出 し ス タ ッ ク の 深 さ を 示 す 。 例 え ば 、 以 下 の コ マ ン ド は Expect 最 初 の 4 レ ベ ル の 呼 び 出 し を ト レ ー ス す る 。 そ れ 以 上 の 深 さ は ト レ ー ス し な い 。

expect −c "strace 4" script.exp

-info フ ラ グ を 指 定 す る と 、 strace は 最 後 の info で な い 指 定 の 内 容 を 復 帰 す る 。

stty args は 端 末 モ ー ド を 変 更 す る 。 外 部 の stty コ マ ン ド と 似 た よ う な も の で あ る 。 デ フ ォ ル ト で は 、 制 御 し て い る 端 末 が ア ク セ ス さ れ る 。 他 の 端 末 は 、 "< /dev/tty..." を 追 加 す る こ と で ア ク セ ス で き る 。 (引 数 を 一 つ の 引 数 に ま と め る べ き で は な い 。 ) ス テ ー タ ス 要 求 は コ マ ン ド の 結 果 と し て ス テ ー タ ス を 復 帰 す る 。 ス テ ー タ ス が 要 求 さ れ ず に 制 御 し て い る 端 末 に ア ク セ ス す る 場 合 、 直 前 の raw と echo の 状 態 を 返 す 。 例 え ば 、 引 数 raw−cooked は 、 端 末 を raw モ ー ド に 設 定 す る 。 引 数 −rawcooked は 、 端 末 を cooked モ ー ド に 設 定 す る 。 引 数 echo−echo は 、 端 末 を そ れ ぞ れ echo あ る い は noecho モ ー ド に 設 定 す る 。 以 下 の 例 は 、 一 時 的 な エ コ ー 禁 止 を ど う や っ て お こ な う か を 示 す 。 こ れ は 、 他 の 自 動 ス ク リ プ ト で 、 そ の 中 に パ ス ワ ー ド が 埋 め 込 ま れ る の を 防 ぐ こ と に 使 わ れ る 。 (も っ と 議 論 し た け れ ば 、 下 の EXPECT ヒ ン ト に あ る 。 )

stty −echo
send_user "Password: "
expect_user -re "(.*)\n"
set password $expect_out(1,string)
stty echo

system args は 、 args を 、 sh(1)に 入 力 す る 。 端 末 か ら コ マ ン ド を 叩 く の と ち ょ う ど 同 じ で あ る 。 Expect は 、 シ ェ ル が 終 る の を 待 つ 。 sh か ら の 復 帰 値 は 、 exec が そ の 復 帰 値 を 扱 う の と 同 じ に 扱 わ れ る 。

exec が 、 ス ク リ プ ト に 標 準 入 出 力 を リ ダ イ レ ク ト す る の と 対 照 的 に 、 対 照 的 に system は 、 リ ダ イ レ ク シ ョ ン を 行 な わ な い 。 (他 に 文 字 列 そ の も の で リ ダ イ レ ク ト を 指 示 し な い 限 り 。 ) そ れ で 、 /dev/tty と 直 接 話 さ な け れ ば な ら な い プ ロ グ ラ ム を 使 う こ と が で き る 。 同 じ 理 由 で 、 system の 結 果 は 、 ロ グ に 記 録 さ れ な い 。

timestamp [args] は 、 タ イ ム ス タ ン プ を 復 帰 す る 。 引 数 が な い 場 合 、 復 帰 す る ま で の 秒 数 が 返 る 。

−format フ ラ グ は 、 文 字 列 が 続 く が 、 そ の 文 字 列 に POSIX の strftime の ル ー ル に 従 っ て 置 換 が か か る 。 例 え ば 、 %a は 曜 日 (す な わ ち 、 Sat)と か 。 他 は 以 下 の 通 り で あ る 。 :
%a 略 記 さ れ た 曜 日 の 名 前
%A 略 さ れ な い 曜 日 の 名 前
%b 略 記 さ れ た 月 の 名 前
%B 略 さ れ な い 月 の 名 前
%c 次 の 形 式 で 書 か れ た 時 刻 : Wed Oct 6 11:45:56 1993
%d 日 (01-31)
%H 時 (00-23)
%I 時 (01-12)
%j 日 (001-366)
%m 月 (01-12)
%M 分 (00-59)
%p am ま た は pm
%S 秒 (00-61)
%u 日 (1-7, 月 曜 日 が 週 の 最 初 の 日 )
%U 週 (00-53, 最 初 の 日 曜 日 が 第 1週 の 最 初 の 日 )
%V 週 (01-53, ISO 8601 ス タ イ ル )
%w 日 (0-6)
%W 週 (00-53, 最 初 の 月 曜 日 が 第 1週 の 最 初 の 日 )
%x date-time as in: Wed Oct 6 1993
%X time as in: 23:59:59
%y year (00-99)
%Y year as in: 1993
%Z timezone (or nothing if not determinable)
%% a bare percent sign こ の 他 の % 指 定 は 定 義 さ れ て い な い 。 他 の 文 字 は 変 更 さ れ な い 。 C ロ カ ー ル だ け が サ ポ ー ト さ れ る 。

−seconds フ ラ グ は 、 タ イ ム ス タ ン プ を 秒 で 表 す 。

−gmt GMT タ イ ム ゾ ー ン で 出 力 す る 。 デ フ ォ ル ト は ロ ー カ ル タ イ ム ゾ ー ン で あ る 。

trap [[command] signals] を 実 行 す る と 、 以 降 指 定 さ れ た signal を 受 け と る と 指 定 さ れ た command を 実 行 す る 。 こ の コ マ ン ド は 、 グ ロ ー バ ル ス コ ー プ で 実 行 さ れ る 。 も し 、 command が 指 定 さ れ な け れ ば 、 シ グ ナ ル ア ク シ ョ ン が 復 帰 す る 。 command が 、 文 字 列 SIG_IGN で あ れ ば 、 シ グ ナ ル が 無 視 さ れ る 。 command が 、 文 字 列 SIG_DFL で あ れ ば 、 シ グ ナ ル は デ フ ォ ル ト の 動 き を す る 。 signals は 、 シ グ ナ ル が 1 つ で も 複 数 の シ グ ナ ル の リ ス ト で も 良 い 。 シ グ ナ ル は 、 数 字 と signal(3)に 記 述 さ れ て い る 文 字 列 の ど ち ら で 指 定 し て も 良 い 。 プ レ フ ィ ク ス の "SIG"は 、 省 略 し て も 良 い 。 引 数 が な け れ ば (ま た は 、 引 数 −number で あ れ ば )、 trap は 、 trapコ マ ン ド で 横 取 り さ れ て い る シ グ ナ ル 番 号 を 復 帰 す る 。

−code フ ラ グ は コ マ ン ド コ ー ド を 返 す 。 Tcl が コ マ ン ド を 動 か し 始 め た 時 に 帰 そ う と し た コ ー ド で あ る 。

−interp フ ラ グ は 、 trap が 宣 言 さ れ た 時 で な く コ マ ン ド が 開 始 さ れ た 時 に イ ン タ プ リ タ に コ マ ン ド を 評 価 さ せ る 。

−name フ ラ グ は 、 trap コ マ ン ド に trap の か か っ て い る シ グ ナ ル 名 を 帰 す 。

−max フ ラ グ は 、 trap コ マ ン ド に 設 定 で き る 最 も 大 き な シ グ ナ ル 番 号 を 帰 す 。 例 え ば 、 "trap {send_user "Ouch!"} SIGINT" は 、 ユ ー ザ ー が ^C を 押 す 度 に "Ouch!" を 表 示 す る 。 デ フ ォ ル ト で は 、 SIGINT(通 常 ^C を 押 す と 発 生 す る )や SIGTERM は 、 Expect を exit さ せ て し ま う 。 こ れ は 、 Expect が 起 動 時 に 実 行 す る 以 下 の trap に よ っ て 起 こ っ て い る 。

trap exit {SIGINT SIGTERM}

-Dフ ラ グ を 使 っ て デ バ ッ ガ を 起 動 す る な ら 、 SIGINT が 再 定 義 さ れ て か ら 対 話 型 デ バ ッ ガ が 起 動 さ れ る 。 こ れ は 以 下 の trap に よ っ て 起 こ る 。

trap {exp_debug 1} SIGINT デ バ ッ ガ の ト ラ ッ プ は 、 環 境 変 数 EXPECT_DEBUG_INIT を 設 定 し て 、 新 し く trap を 起 動 す る こ と で 変 更 で き る 。 も ち ろ ん 、 ス ク リ プ ト に trapコ マ ン ド を 足 す だ け で 例 の ト ラ ッ プ は 両 方 と も 上 書 き で き る 。 特 に 、 自 作 の "trap exit SIGINT" が あ る な ら 、 こ れ は デ バ ッ ガ の ト ラ ッ プ を 上 書 き し て し ま う 。 ユ ー ザ ー に デ バ ッ ガ を 全 く 触 ら せ な い よ う に す る の に 、 便 利 で あ る 。

SIGINT の ト ラ ッ プ を 独 自 に 定 義 し た い け れ ど 、 デ バ ッ ガ に も 同 時 に 割 り 込 ん で も ら い た い の で あ れ ば 、 こ う 書 く 。 :

if ![exp_debug] {trap mystuff SIGINT} 代 わ り に 、 別 の シ グ ナ ル を 使 っ て デ バ ッ ガ に 割 り 込 み を か け る こ と が で き る 。

trap は 、 SIGALRM の ア ク シ ョ ン を 上 書 き し な い 。 Expect が 内 部 で 使 用 し な い 。 disconnect コ マ ン ド は 、 SIGALRMを SIG_IGN (ignore)に 設 定 す る 。 後 か ら 発 行 さ れ る spawn コ マ ン ド を 実 行 し て い る 間 、 SIGALRM は デ ィ ス エ ー ブ ル 中 で あ れ ば 再 度 イ ネ ー ブ ル に で き る 。 も っ と 情 報 が 欲 し い 場 合 、 signal(3) を 参 照 す る こ と 。

wait [args] は 、 spawn さ れ た プ ロ セ ス (あ る い は 、 名 前 つ き の プ ロ セ ス が な け れ ば 現 在 の プ ロ セ ス ) が 終 了 す る の を 待 つ 。

wait は 、 通 常 4 つ の 整 数 の リ ス ト を 帰 す 。 最 初 の 整 数 は 、 終 了 を 待 ち 構 え て い る プ ロ セ ス の pid で あ る 。 2 つ め の 整 数 は 、 関 連 す る spawn id で あ る 。 3 つ め の 整 数 は 、 オ ペ レ ー テ ィ ン グ シ ス テ ム エ ラ ー が あ れ ば -1、 そ う で な け れ ば 、 0 で あ る 。 3 つ め の 整 数 が 0 で あ れ ば 、 4 つ め の 整 数 は spawnさ れ た プ ロ セ ス か ら の リ タ ー ン コ ー ド で あ る 。 3 つ め の 整 数 が -1 で あ れ ば 、 4 つ め の 整 数 は オ ペ レ ー テ ィ ン グ シ ス テ ム に よ っ て 設 定 さ れ た errno の 値 で あ る 。 グ ロ ー バ ル 変 数 errorCode も 設 定 さ れ る 。 追 加 の 要 素 が wait の 復 帰 値 に 加 わ っ て も 構 わ な い 。 オ プ シ ョ ン の 5つ め の 要 素 は 、 情 報 ク ラ ス の 識 別 子 で あ る 。 今 の と こ ろ 、 こ の 要 素 の 唯 一 可 能 な 値 は CHILDKILLED で 、 そ の 場 合 、 次 の 二 つ の 値 が C ス タ イ ル の シ グ ナ ル 名 と 短 い 文 書 に よ る 記 述 で あ る 。

−i フ ラ グ に よ っ て 、 wait を 行 な う 名 前 付 き spawn_id(プ ロ セ ス ID で は な く )を 指 定 す る 。 SIGCHLD ハ ン ド ラ の 内 部 で は 、 spawn ID -1 を 指 定 す る こ と で 、 spawn さ れ た プ ロ セ ス の い ず れ か を wait で き る 。

−nowait フ ラ グ を 指 定 す る と 、 wait が 成 功 の 復 帰 値 で 即 時 復 帰 す る 。 (あ と で )そ の プ ロ セ ス が exit す る と 、 自 動 的 に 後 始 末 が 行 な わ れ 、 明 示 的 に wait す る 必 要 が な い 。

wait コ マ ン ド は 、 引 数 に "-i -1" を 指 定 す る こ と に よ っ て 、 fork し た プ ロ セ ス を 待 つ た め に も 使 わ れ る 。 spawn し た プ ロ セ ス に 用 い ら れ る 場 合 と 異 な り 、 こ の コ マ ン ド は い つ で も 実 行 で き る 。 ど の プ ロ セ ス を 待 つ か を 制 御 す る こ と は 出 来 な い が 、 返 り 値 は プ ロ セ ス ID と し て チ ェ ッ ク で き る 。

ラ イ ブ ラ リ

Expect は 、 ス ク リ プ ト の た め の 二 つ の ビ ル ト イ ン ラ イ ブ ラ リ を 自 動 的 に 理 解 す る 。 そ れ ら は 変 数 exp_library と 変 数 exp_exec_library に 設 定 さ れ た デ ィ レ ク ト リ 名 と し て 定 義 さ れ る 。 こ れ ら の デ ィ レ ク ト リ に は 、 他 の ス ク リ プ ト に よ っ て 使 え る ユ ー テ ィ リ テ ィ フ ァ イ ル が 入 っ て い る 。

exp_library に は 、 ア ー キ テ ク チ ャ に 依 存 し な い フ ァ イ ル が 格 納 さ れ る 。 exp_exec_library に は 、 ア ー キ テ ク チ ャ に 依 存 す る フ ァ イ ル が 格 納 さ れ る 。 あ な た の シ ス テ ム に よ っ て は 、 両 方 の デ ィ レ ク ト リ が 空 と い う 場 合 も あ り 得 る 。 フ ァ イ ル $exp_exec_library/cat-buffers の 存 在 は 、 あ な た の シ ス テ ム の /bin/cat が デ フ ォ ル ト で バ ッ フ ァ リ ン グ さ れ て い る か ど う か に 左 右 さ れ る 。

整 形 印 刷

Expect ス ク リ プ ト を き れ い に 印 刷 す る た め の vgrind の 定 義 が あ る 。 Expect デ ィ ス ト リ ビ ュ ー シ ョ ン と 一 緒 に 配 布 さ れ て い る vgrind 定 義 が 正 し く イ ン ス ト ー ル さ れ て い る と 仮 定 し て 、 こ う す れ ば 使 え る 。

vgrind −lexpect file

マ ニ ュ ア ル ペ ー ジ に よ る 記 述 で は 、 あ ら ゆ る も の を ど う 組 み 合 わ せ る の か と い う こ と が 明 白 で は な い 。 私 と し て は 、 Expect デ ィ ス ト リ ビ ュ ー シ ョ ン の example デ ィ レ ク ト リ に あ る 例 を 読 ん で 試 し て み て 欲 し い と 思 う 。 い く つ か は 本 物 の プ ロ グ ラ ム で あ る 。 そ れ 以 外 は 特 定 の テ ク ニ ッ ク の 単 純 な 解 説 、 あ と 、 も ち ろ ん 、 単 な る ク イ ッ ク ハ ッ ク が 少 し あ る 。 INSTALL フ ァ イ ル に は こ れ ら の プ ロ グ ラ ム の 簡 単 な 梗 概 が 書 か れ て い る 。

Expect の 論 文 も 役 に 立 つ (関 連 項 目 参 照 )。 い く つ か は 、 初 期 バ ー ジ ョ ン の Expect の 文 法 を 使 っ て い る が 、 そ れ と と も に あ る 根 本 的 な 考 え は 、 な お 有 効 で あ り 、 こ の マ ニ ュ ア ル ペ ー ジ よ り 詳 細 に 書 か れ て い る 。

警 告

拡 張 は Expect の コ マ ン ド 名 と 衝 突 す る か も し れ な い 。 例 え ば 、 send は 、 Tk で は 全 く 別 の 目 的 で 定 義 さ れ て い る 。 そ う い う 理 由 で 、 ほ と ん ど の Expect コ マ ン ド は 、 "exp_XXXX" と い う 別 の 記 法 (エ イ リ ア ス )も サ ポ ー ト す る 。 "exp", "inter", "spawn", "timeout" で 始 ま る コ マ ン ド と 変 数 は 、 エ イ リ ア ス を 持 た な い 。 こ の 環 境 間 の 互 換 性 が 必 要 で あ れ ば 、 拡 張 さ れ た コ マ ン ド 名 を 用 い る こ と 。

Expect は 、 か な り 自 由 な ス コ ー プ を 持 っ て い る 。 特 に 、 Expect プ ロ グ ラ ム で 指 定 し た コ マ ン ド に よ り 読 み 込 ま せ る 変 数 は 、 そ の ロ ー カ ル ス コ ー プ 内 で ま ず 探 索 さ れ 、 見 つ か ら な け れ ば 、 グ ロ ー バ ル ス コ ー プ で 探 索 さ れ る 。 例 え ば 、 こ う す る こ と で expect を 使 う 全 て の プ ロ シ ジ ャ に "global timeout" を 書 く 必 要 が な く な る 。 逆 に 、 プ ロ シ ジ ャ 内 に 書 か れ た 変 数 は 全 て ロ ー カ ル ス コ ー プ 内 に 設 定 さ れ る 。 ("global"コ マ ン ド を 指 定 し な い 限 り は )。 こ の 動 作 が 引 き 起 こ す も っ と も 共 通 し た 問 題 は 、 spawn が プ ロ シ ジ ャ 内 で 実 行 さ れ た 時 で あ る 。 プ ロ シ ジ ャ の 外 で は 、 spawn_id は ス コ ー プ の た め 、 も は や 存 在 し な い の で spawn さ れ た プ ロ セ ス は 単 純 に は ア ク セ ス 不 能 と な る 。 そ の よ う な プ ロ セ ス に は 、 "global spawn_id"を 付 け 加 え ね ば な ら な い 。

multi-spawn 機 能 が 使 え な い (つ ま り 、 あ な た の シ ス テ ム が select (BSD *.*), poll (SVR>2),ま た は 、 そ れ と 等 価 な も の の い ず れ も サ ポ ー ト し て い な い )場 合 、 Expect は 、 同 時 に 1 プ ロ セ ス し か 制 御 で き な い 。 こ の 場 合 、 spawn_id を 無 理 に 設 定 し た り 、 spawn さ れ た プ ロ セ ス が 走 っ て い る 間 に exec を 使 っ て プ ロ セ ス を 実 行 し た り し て は な ら な い 。 さ ら に 、 複 数 の プ ロ セ ス (片 方 が ユ ー ザ ー で も )か ら 同 時 に expect す る こ と も で き な い 。 端 末 制 御 パ ラ メ タ は 、 ス ク リ プ ト に 大 き な 影 響 を 与 え る 。 例 え ば 、 ス ク リ プ ト が エ コ ー を 探 す よ う に 書 か れ て い れ ば 、 エ コ ー を オ フ に す る と 動 作 が お か し く な る 。 こ の 理 由 で 、 Expect は デ フ ォ ル ト で 正 気 の 端 末 パ ラ メ タ を 設 定 す る 。 不 幸 な こ と に 、 こ の 設 定 が 他 の プ ロ グ ラ ム で は ま ず い 場 合 が あ る 。 例 え ば 、 emacs シ ェ ル は "通 常 の "マ ッ ピ ン グ を 変 更 し よ う と す る 。 : newlinesは 、 carriage-return newlines に 変 換 さ れ ず newlines に マ ッ プ さ れ る 。 そ し て 、 エ コ ー は 行 な わ れ な い 。 こ う マ ッ プ さ れ る こ と で 、 emacs は 入 力 行 を 編 集 で き る 。 残 念 な が ら 、 Expect は こ の マ ッ ピ ン グ を 検 出 で き な い 。

Expect が 端 末 パ ラ メ タ の デ フ ォ ル ト 設 定 を 上 書 き し な い よ う に 指 定 す る こ と が で き る が 、 そ う い っ た 環 境 で 動 か す ス ク リ プ ト を 書 く と き は 細 心 の 注 意 が 必 要 で あ る 。 emacs の 場 合 、 エ コ ー や 改 行 コ ー ド の マ ッ ピ ン グ を 回 避 し な け れ ば な ら な い 。

( expect と そ の 変 種 、 お よ び 、 interact と い っ た )1 つ の リ ス ト に ブ レ ー ス さ れ た 引 数 を 受 け と る コ マ ン ド は 、 リ ス ト が 引 数 を ど れ だ け 持 っ て い る の か を 判 断 す る の に 、 発 見 的 手 法 を 用 い る 。 そ の 発 見 的 手 法 は が 失 敗 す る 唯 一 の 場 合 は 、 引 数 の 一 つ に 複 数 の \nが 埋 め 込 ま れ 、 そ の 間 に ホ ワ イ ト ス ペ ー ス が な い 場 合 で あ る 。 こ れ は 十 分 検 出 不 能 な 状 態 だ が 、 引 数 "−nobrace" で 、 強 制 的 に 一 つ の 引 数 と し て 扱 う こ と が で き る 。 自 動 的 に 生 成 さ れ た Expect コ ー ド 中 で 使 わ れ る か も し れ な い 。 同 様 に 、 -brace は 複 数 の パ タ ー ン /ア ク シ ョ ン を ひ と つ の 引 数 と し て 扱 う こ と を 強 制 す る 。

バ グ

プ ロ グ ラ ム に "sex" ("Smart EXec" か "Send-EXpect" の 略 ) と い う 名 前 を つ け る の は 実 に 魅 力 的 だ っ た の だ が 、 セ ン ス の 良 い 方 (あ る い は 、 単 に ピ ュ ー リ タ ニ ズ ム )が 優 先 さ れ た 。 シ ェ ル が spawn さ れ る と ttyに ア ク セ ス で き な い と 文 句 を い っ て 、 し か し 、 動 作 は す る と い う シ ス テ ム が あ る 。 こ れ は 、 こ の シ ス テ ム が tty制 御 を 得 る た め の 機 構 を 持 っ て い る が Expect は そ れ を 知 ら な い と い う 意 味 で あ る 。 ど う い う 仕 組 み か 調 べ て 、 そ の 情 報 を 私 に 知 ら せ て ほ し い 。

Ultrix 4.1 (少 な く と も 最 新 バ ー ジ ョ ン の あ た り ) で は 、 1000000 を 超 え る タ イ ム ア ウ ト を 0 と み な し て し ま う 。

Digital UNIX 4.0A (お そ ら く 他 の バ ー ジ ョ ン も )は SIGCHLD ハ ン ド ラ を 定 義 す る と 、 pty の 割 り 付 け を 拒 否 す る 。 詳 細 は grantpt ペ ー ジ を 参 照 の こ と 。

IRIX 6.0 は 、 pty へ の ア ク セ ス 制 御 を 正 確 に 扱 え な い 。 そ れ で 、 Expect は 、 pty が ア ロ ケ ー ト で き な い 場 合 は 、 他 の 人 が 前 に 使 っ た pty の ア ロ ケ ー ト を 試 み る 。 IRIX 6.1 に ア ッ プ グ レ ー ド す る こ と 。

telnet (SunOS 4.1.2 で の み 確 認 )は 、 TERM が 設 定 さ れ て な い と ハ ン グ す る 。 こ の 問 題 は cron や at や CGI ス ク リ プ ト で 使 う 時 に 問 題 だ (設 定 し な い の で )。 そ れ で 、 明 示 的 に 指 定 し な く て は な ら な い - 本 当 の タ イ プ は 通 常 関 係 な い 。 何 か に 設 定 し て な い と 駄 目 な の だ ! 以 下 の 記 述 は お そ ら く ほ と ん ど の 場 合 を 満 足 さ せ る だ ろ う 。

set env(TERM) vt100

tipt (BSDI BSD/OS 3.1 i386 で の み 確 認 )は 、 SHELL と HOME が 設 定 さ れ て な い と ハ ン グ す る 。 こ の 問 題 は cron や at や CGI ス ク リ プ ト で 使 う 時 に 問 題 だ (設 定 し な い の で )。 そ れ で 、 明 示 的 に 指 定 し な く て は な ら な い - 本 当 の タ イ プ は 通 常 関 係 な い 。 何 か に 設 定 し て な い と 駄 目 な の だ ! 以 下 の 記 述 は お そ ら く ほ と ん ど の 場 合 を 満 足 さ せ る だ ろ う 。

set env(SHELL) /bin/sh
set env(HOME) /usr/local/bin

pty の イ ン プ リ メ ン ト の 中 に は 、 プ ロ セ ス が フ ァ イ ル 記 述 子 を ク ロ ー ズ し た 後 、 読 ん で な い 出 力 を 10 か ら 15 秒 後 (こ の 値 は イ ン プ リ メ ン ト に 依 存 )に 投 げ て く る も の が あ る 。 そ れ ゆ え 、

spawn date
sleep 20
expect の よ う な Expect プ ロ グ ラ ム は 失 敗 す る 。 失 敗 し な い よ う に 非 対 話 的 な プ ロ グ ラ ム で は spawn せ ず に exec す る こ と 。 こ う い う 状 況 は 考 え ら れ る が 、 実 際 に は 私 は ま だ そ の 状 態 に 陥 っ た こ と が な い 。 つ ま り 、 こ の 原 因 で 対 話 プ ロ グ ラ ム の 最 後 の 出 力 を 取 り こ ぼ す と い う 状 態 に な っ た こ と が な い 。 一 方 、 Cray UNICOS の pty は 読 み 込 ん で い な い 出 力 を フ ァ イ ル デ ィ ス ク リ プ タ を プ ロ セ ス が 閉 じ る と す ぐ に 投 げ て く る 。 私 は Cray に こ の 動 き に つ い て 報 告 し 、 回 避 す る た め の 修 正 を 行 な っ た 。 プ ロ ン プ ト と 応 答 の 間 に デ ィ レ イ が 必 要 な 場 合 が あ る 。 tty イ ン タ ー フ ェ ー ス が UART の 設 定 を 変 え た り 、 ス タ ー ト /ス ト ッ プ ビ ッ ト を 探 し て ボ ー レ ー ト を 合 わ せ て い る 時 な ど で あ る 。 通 常 、 こ こ で 必 要 と さ れ て い る も の は 1 秒 か 2 秒 の 待 ち 合 わ せ で あ る 。 も っ と し っ か り し た や り 方 は ハ ー ド ウ ェ ア が 入 力 を 受 け る 準 備 が で き る ま で 繰 り 返 す こ と で あ る 。 以 下 の 例 は 、 両 方 の 戦 略 を 採 用 し て い る 。 :

send "speed 9600\r";
sleep 1
expect {
timeout {send "\r"; exp_continue}
$prompt }

−code を ト ラ ッ プ す る の は Tcl の イ ベ ン ト ル ー プ に 依 存 し て い る コ マ ン ド (sleep な ど )で は 動 か な い 。 問 題 は 、 イ ベ ン ト ル ー プ の 中 で は Tcl は 非 同 期 イ ベ ン ト ハ ン ド ラ か ら の 返 り 値 を 捨 て て い る か ら で あ る 。 回 避 方 法 と し て は 、 ト ラ ッ プ コ ー ド で フ ラ グ を セ ッ ト し 、 コ マ ン ド (sleep な ど )の 直 後 で フ ラ グ を チ ェ ッ ク す る こ と で あ る 。

EXPECT ヒ ン ト

Expect に つ い て 、 直 観 的 で な い 点 が 少 し あ る 。 こ の セ ク シ ョ ン で は そ う い っ た こ と の 指 摘 と そ れ に 対 す る 示 唆 を 試 み る 。 共 通 の expect の 問 題 は 、 シ ェ ル プ ロ ン プ ト を 認 識 す る 方 法 で あ る 。 そ の 設 定 も 、 そ れ を 扱 う 人 も 、 使 う シ ェ ル も ま ち ま ち な の で 、 実 際 に 出 て く る プ ロ ン プ ト を 知 ら ず に 、 汎 用 的 に rlogin を 自 動 化 す る こ と は 困 難 で あ る 。 妥 当 な 線 は 、 ユ ー ザ ー に プ ロ ン プ ト に マ ッ チ す る 正 規 表 現 (特 に プ ロ ン プ ト の 終 り の 部 分 )を 環 境 変 数 EXPECT_PROMPT に 保 存 さ せ る こ と で あ る 。 以 下 の よ う な コ ー ド で で き る 。 EXPECT_PROMPT が な く て も 、 コ ー ド は 正 し く 動 く 可 能 性 が あ る 。

set prompt "(%|#|\\$) $" ;# default prompt
catch {set prompt $env(EXPECT_PROMPT)}

expect -re $prompt 私 と し て は 、 見 え る と 思 っ て い る も の の 終 り の 部 分 を 含 ん だ expect パ タ ー ン を 書 く よ う に 勧 め る 。 そ う す れ ば 、 全 体 を 見 る 前 に 応 答 を 返 し て し ま う こ と を 避 け る こ と が で き る 。 さ ら に 、 全 体 が 見 え る 前 に 答 え る こ と も で き る が そ の 文 字 は 質 問 に 混 ざ っ て echo さ れ る 。 言 い 替 え れ ば 、 会 話 は 正 常 だ が 見 た 目 は 混 ざ っ て 見 え る 。 ほ と ん ど の プ ロ ン プ ト の 終 り の 文 字 は ス ペ ー ス で あ る 。 例 え ば 、 ftpか ら の プ ロ ン プ ト は 、 ’f’, ’t’, ’p’, ’>’ そ し て <blank> で あ る 。 こ の プ ロ ン プ ト に マ ッ チ さ せ る に は 、 こ の 文 字 の 一 つ 一 つ に マ ッ チ し な け れ ば な ら な い 。 blank を 含 め な い の は 、 よ く あ る 誤 り で あ る 。 明 示 的 に blank を 入 れ る よ う に 。

X* の 形 の パ タ ー ン を 使 う の で あ れ ば 、 * は Xか ら 最 後 に 受 け と る 何 か ま で の 全 て に マ ッ チ す る 。 こ れ は 一 見 直 観 的 だ が 、 "最 後 に 受 け と る 何 か "が コ ン ピ ュ ー タ の 速 度 と カ ー ネ ル と デ バ イ ス ド ラ イ バ に よ る I/O処 理 に よ っ て 変 わ っ て し ま う の で 混 乱 す る だ ろ う 。 特 に 、 人 間 は プ ロ グ ラ ム の 出 力 が 巨 大 な ひ と ま と ま り と し て や っ て く る と 思 い が ち だ が 、 実 際 に は 、 ほ と ん ど の プ ロ グ ラ ム は 一 行 を 一 度 に 送 る 。 こ う 仮 定 す る と 、 直 前 の 段 落 の パ タ ー ン に あ っ た * は 、 行 の 終 り に し か マ ッ チ し な い か も 知 れ な い 。 た と え 、 も っ と 入 力 が あ る と 思 わ れ る 場 合 で も 出 力 を 全 て 受 け と っ た 時 点 で し か マ ッ チ を 行 な わ な い の で あ る 。

expect は 、 指 定 し た パ タ ー ン が 教 え て く れ な い 限 り 、 出 力 が さ ら に や っ て く る の か ど う か わ か ら な い 。 行 指 向 の バ ッ フ ァ リ ン グ を 行 な っ て い る 場 合 で す ら 、 賢 い や り 方 と は い え な い 。 プ ロ グ ラ ム は バ ッ フ ァ リ ン グ の タ イ プ を め っ た に 保 証 し な い だ け で な く 、 そ の 際 に 消 化 不 良 を 起 こ し て 出 力 行 を 中 断 し 、 行 末 を バ ッ フ ァ 中 の ラ ン ダ ム な 位 置 に 置 い て し ま う 。 そ れ で 、 パ タ ー ン を 書 く 時 に は 、 プ ロ ン プ ト の 最 後 の 何 文 字 か を 入 れ て お い た 方 が 賢 い や り 方 と い え る の で あ る 。 プ ロ グ ラ ム の 最 後 の 出 力 に あ る パ タ ー ン を 待 ち 、 実 際 に は 何 が し か 他 の も の が 発 行 さ れ て い る 場 合 に は timeout キ ー ワ ー ド で 判 定 す る こ と が で き な い 。 理 由 は 、 expect が 、 タ イ ム ア ウ ト し な い − そ の か わ り に eof を 見 つ け ら れ る − か ら で あ る 。 代 わ り に な る も の を 使 う こ と 。 も っ と 良 い の は 、 両 方 使 う こ と だ ろ う 。 行 が 回 り 込 ん だ 場 合 で も 、 行 そ の も の を 編 集 す る べ き で は な い 。

tty ド ラ イ バ に よ っ て 出 力 さ れ る 時 に newline は 、 普 通 carriage return, linefeed の 組 に 変 換 さ れ る 。 そ れ で 、 2 ラ イ ン に マ ッ チ す る に は 、 例 え ば 、 printf("foo\nbar") に マ ッ チ さ せ る に は 、 "foo\r\nbar" と い う パ タ ー ン を 使 う こ と に な る 。 似 た よ う な 変 換 は 、 ユ ー ザ ー か ら expect_user を 通 し て 入 力 を 読 み 込 む 時 に も 起 こ る 。 こ の 場 合 、 ユ ー ザ ー が リ タ ー ン を 押 す と 、 そ れ は newline に 変 換 さ れ る 。 そ の 後 、 Expect が 端 末 モ ー ド を raw モ ー ド (telnet の よ う な )を 設 定 す る と 、 問 題 が 発 生 す る 可 能 性 が あ る 。 プ ロ グ ラ ム が 本 当 の リ タ ー ン を 待 っ て し ま う か ら で あ る 。 (プ ロ グ ラ ム の 中 に は 、 newline を リ タ ー ン に 変 え て も 大 丈 夫 な も の も あ る が 、 ほ と ん ど は だ め で あ る 。 ) 残 念 な が ら 、 プ ロ グ ラ ム が 端 末 を raw モ ー ド に す る こ と を 検 出 す る 方 法 が な い 。 手 で newline を リ タ ー ン に 変 え る の で は な く 、 "stty raw"を 使 う の が 解 決 策 で あ る 。 stty raw は 、 変 換 を 停 止 す る 。 し か し 、 こ う す る と cooked モ ー ド の 行 編 集 機 能 が 使 え な く な る と い う こ と に 注 意 す る こ と 。

interact は 、 端 末 を raw モ ー ド に 設 定 す る の で 、 こ の 問 題 は 発 生 し な い 。

Expect ス ク リ プ ト の 中 で パ ス ワ ー ド (や 他 の 機 密 情 報 )を 保 存 す る と 便 利 な こ と は よ く あ る 。 だ れ か の ア ク セ ス を 受 け る と そ の 影 響 を 受 け て し ま う コ ン ピ ュ ー タ で そ う い う こ と を す る の は 勧 め ら れ な い 。 そ れ で 、 パ ス ワ ー ド の プ ロ ン プ ト を ス ク リ プ ト か ら 出 す の が 、 文 字 通 り パ ス ワ ー ド を 埋 め 込 む よ り は 、 良 い 考 え と い え る 。 と は い う も の の 、 そ う い っ た 埋 め 込 み を す る し か な い 場 合 も あ る 。 不 幸 な こ と に 、 UNIX の フ ァ イ ル シ ス テ ム は 「 実 行 可 能 で 読 め な い 」 ス ク リ プ ト を 作 る 直 接 の 方 法 が な い 。 setgid シ ェ ル ス ク リ プ ト を サ ポ ー ト し た シ ス テ ム で は 、 次 の よ う に す る こ と で 間 接 的 に シ ミ ュ レ ー ト で き る 。 , Expect ス ク リ プ ト (機 密 情 報 の 入 っ た )を 普 通 に 作 る 。 そ の パ ー ミ ッ シ ョ ン を 750 (−rwxr−x−−−) に 設 定 し 、 trusted group つ ま り 、 読 ん で も 良 い グ ル ー プ の 所 有 と す る 。 必 要 な ら 、 こ の 目 的 の た め の 新 し い グ ル ー プ を つ く る こ と 。 次 に 、 /bin/sh ス ク リ プ ト を パ ー ミ ッ シ ョ ン
2751 (−rwxr−s−−x) で 、 同 じ グ ル ー プ の 所 有 で 作 成 す る 。 こ う す る と 、 シ ェ ル ス ク リ プ ト は だ れ か ら も 実 行 で き (か つ 、 読 め )る 。 実 行 す る と 、 そ れ は Expect ス ク リ プ ト を 実 行 す る 。

関 連 項 目

Tcl(3), libexpect(3)
"Exploring Expect: A Tcl-Based Toolkit for Automating Interactive Programs"
by Don Libes, pp. 602, ISBN 1-56592-090-2, O’Reilly and Associates, 1995.
"expect: Curing Those Uncontrollable Fits of Interactivity"
by Don Libes, Proceedings of the Summer 1990 USENIX Conference, Anaheim, California, June 11-15, 1990.
"Using
expect to Automate System Administration Tasks" by Don Libes, Proceedings of the 1990 USENIX Large Installation Systems Administration Conference, Colorado Springs, Colorado, October 17-19, 1990.
"Tcl: An Embeddable Command Language"
by John Ousterhout, Proceedings of the Winter 1990 USENIX Conference, Washington, D.C., January 22-26, 1990.
"expect: Scripts for Controlling Interactive Programs"
by Don Libes, Computing Systems, Vol. 4, No. 2, University of California Press Journals, November 1991.
"Regression Testing and Conformance Testing Interactive Programs",
by Don Libes, Proceedings of the Summer 1992 USENIX Conference, pp. 135-144, San Antonio, TX, June 12-15, 1992.
"Kibitz − Connecting Multiple Interactive Programs Together",
by Don Libes, Software − Practice & Experience, John Wiley & Sons, West Sussex, England, Vol. 23, No. 5, May, 1993.
"A Debugger for Tcl Applications",
by Don Libes, Proceedings of the 1993 Tcl/Tk Workshop, Berkeley, CA, June 10-11, 1993.

著 者

Don Libes, National Institute of Standards and Technology

謝 辞

Tclを 生 み 出 し た John Ousterhout と 、 イ ン ス ピ レ ー シ ョ ン を 与 え て く れ た Scott Paisley に 感 謝 す る 。 Expect の オ ー ト コ ン フ ィ ギ ュ レ ー シ ョ ン コ ー ド に つ い て 、 Rob Savoye に 感 謝 す る 。

HISTORY フ ァ イ ル に expect の 進 化 の 大 部 分 が 記 述 さ れ て い る 。 こ の フ ァ イ ル は 面 白 く 読 め て 、 か つ 、 あ な た の こ の ソ フ ト ウ ェ ア へ の 洞 察 を よ り 深 く す る だ ろ う 。 こ の フ ァ イ ル に 書 か れ て い る 、 私 に バ グ フ ィ ッ ク ス を 送 っ て く れ た 人 た ち や 、 他 の 援 助 を し て く れ た 人 た ち に 感 謝 す る 。

Expect の 設 計 と 実 装 は 、 部 分 的 に ア メ リ カ 政 府 か ら そ の 対 価 を も ら っ て い る の で 、 パ ブ リ ッ ク ド メ イ ン で あ る 。 し か し 、 こ の プ ロ グ ラ ム と ド キ ュ メ ン ト あ る い は そ の 一 部 が 使 わ れ た な ら 、 著 者 と NIST へ の 謝 辞 を 述 べ て も ら い た い 。