2010年10月24日日曜日

[expect] spawnしたプロセスの終了ステータスを得る

spawnしたプロセスの終了ステータスを得たいことがある。
この場合はwaitでプロセスの終了を待つと、結果が返ってくる。
結果はリストになっていて3番目(インデックス2)が-1の場合は
OSエラー、0の場合は4番目(インデックス3)にswawnしたプロセスの
終了ステータスが入っている。

スクリプトの例。読み取り権のないファイルをcatして終了ステータスを得る。
spawn cat /etc/shadow
expect eof
catch wait result
set OS_ERROR [ lindex $result 2 ]
if { $OS_ERROR == -1 } {
        puts "Fail to exec"
        exit 127
}
set STATUS [ lindex $result 3 ]
exit $STATUS
スクリプト自体をcatの終了ステータスで終了する。


実行結果
$ expect test.expect
spawn cat /etc/shadow
cat: /etc/shadow: Permission denied
$ echo $?
1
きちんと1が返っている。

expectはTcl言語の文法を知らないとちょっと戸惑う。
man expectでもよくわからないと思うことは実はTcl言語の文法だったり。

0 件のコメント:

コメントを投稿