トップページへ

シェルスクリプトの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節のように確認メッセージを分けて記述します。

« 前の記事へ

次の記事へ »

トップページへ