expectで正規表現でプロンプトを待つ
毎日某所へscpでデータを送付しているのですが、scpでパスワードを聞いてくるのでexpect をつかってスクリプトを書いています。
このブログを検索すると、あった。二年前に作ったのか。
で、先方が送り先の機械をリプレイスするので新しい機械で試して欲しいとのこと。
試してみるとパスワードプロンプトが微妙に違う。たぶん、OSの違いによるsshdの違いだと思うんだけど。
上にある二年前に作ったときはパスワードプロンプトに
Password:
を期待している。ところが新しい機械では
xxxx@hoge.example.com's password:
となっている。リプレイスされるのは当分先なので、スクリプトを改修するにしても両方に対応する必要がある。
なのでexpectで上記の両方を期待できるように改修。どうやるんだろうとちょっと調べるとexpectに -re と書けばいいらしい。
expect { -re "[Pp]assword:" { send "password" } }
部分一致でもOKな模様で上記で新旧両方に対応できました。