ksaitoの日記

日々試したことの覚え書き

手動のオペレーションを自動化する

以前にexpectコマンドを使って手動のオペレーションを自動化する方法を紹介しました。
自動化したオペレーションのスクリプトにオプション部分を引数で指定したり、cronで定期的に実行するためにスクリプトのインストールディレクトリを認識させることができるとさらに便利です。

引数の指定

引数は、argv変数にリストとして格納されます。
下記の2-3行目のようにlindexを使って取り出すことができ、7行目と9行目のように参照できます。

$ cat -n arg.exp 
     1	set timeout 5
     2	set arg1 [lindex $argv 0]
     3	set arg2 [lindex $argv 1]
     4	
     5	spawn sh
     6	expect "$ "
     7	send "echo $arg1\n"
     8	expect "$ "
     9	send "echo $arg2\n"
    10	expect "$ "
    11	send "exit\n"
$ expect -f arg.exp a b
spawn sh
$ echo a
a
$ echo b
b
$

スクリプトのインストールディレクトリの認識

cronで実行する場合、スクリプトのあるディレクトリからの相対パスを指定できると便利です。
argv0変数にスクリプトのパスが格納されるのでdirnameコマンドと組み合わせてスクリプトが格納されているディレクトリを取り出せます。

$ cat -n basedir.exp 
     1	set timeout 5
     2	set basedir [lindex [exec dirname $argv0] 0]
     3	
     4	spawn sh
     5	expect "$ "
     6	send "echo $basedir\n"
     7	expect "$ "
     8	send "exit\n"
$ expect -f $HOME/work/expect/basedir.exp 
spawn sh
$ echo /home/user/work/expect
/home/user/work/expect
$ $