シェルスクリプトのexpectで応答メッセージを振り分ける方法
小粋空間 » Programming Language » bash » シェルスクリプトのexpectで応答メッセージを振り分ける方法
シェルスクリプトのexpectで確認メッセージを振り分ける方法を紹介します。
1.問題点
シェルスクリプトを使ってパスワード入力が必要なコマンド(scp)を実行するためにexpectを使っています(下記)。
#!/bin/bash
expect -c "
spawn scp /home/foo/abc.txt foo@172.16.5.10:/home/foo
expect \"Are you sure you want to continue connecting (yes/no)?\"
send \"yes\n\"
expect \"password:\"
send \"hoge\n\"
interact
"
ですが、確認メッセージが2パターンあり、それらを振り分ける方法がわかりません。
具体的には、
% scp /home/foo/abc.txt foo@172.16.5.10:/home/foo
というコマンドを実行すると、初回は、
Are you sure you want to continue connecting (yes/no)?
と聞かれて、そのあと
password:
を聞かれるのですが、2回目以降は、
password:
しか聞かれません。
ということで、シェルスクリプトのexpectで確認メッセージを振り分ける方法を紹介します。
2.シェルスクリプトのexpectで確認メッセージを振り分ける
確認メッセージを振り分けるには、次のように書き換えます。
#!/bin/bash
expect -c "
spawn scp /home/foo/abc.txt foo@172.16.5.10:/home/foo
expect {
\"Are you sure you want to continue connecting (yes/no)?\" {
send \"yes\n\"
expect \"password:\"
send \"hoge\n\"
} \"password:\" {
send \"hoge\n\"
}
}
interact
"
具体的には、expect節で全体を括り、その中にifのthen節とelse節のように確認メッセージを分けて記述します。