シェルスクリプトの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節のように確認メッセージを分けて記述します。
Posted by yujiro このページの先頭に戻る
- bashでPostgreSQLのselect結果を出力する方法
- bashでbackspaceが動作しない場合の対処
- bashの変数から最後の1文字を取得・削除する方法
- bashのwhile文で利用した変数がループ外で反映されない場合の対処
- bashのechoでアスタリスク「*」がワイルドカードとして展開される場合の対処
- bashの正規表現でスペース(空白)を判定する方法
- bashで文字列の長さを調べる方法
- bashで数値を判定する方法
- bashで小数点を比較する方法
- bashの配列をjoinする方法
- bashのif文で正規表現を使用する方法
- Bashで変数を大文字または小文字に変換する方法
- bashの変数をsplitして配列を作る方法
- シェルスクリプトでtelnet接続する方法
- bashで小数点を比較する方法
トラックバックURL
コメントする
greeting