SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【linux】Expectコマンド使用例(書き方備忘録)

Expectとは何か?

Expect は、スクリプトの指示に従って、対話的なプログラムと”会話”するプログラムである。対話的なプログラムからのレスポンスに応じた返答をスクリプトにさせることができる。いつもキーボードから入力しているパスワードなどを、スクリプトから入力させることができる。

詳細はこちらなどで → man

さっそく使用例

scpでファイル転送したい。パスワード認証がある。
スクリプトをファイルに書いて、expectコマンドに引数で渡せば実行できる。

$ vi test
spawn scp /tmp/zzzz.file xxxxxx@192.168.123.123:/tmp
expect password
send 1234567890
expect $
exit
$ expect test

→ scp コマンドを起動して、”password”と訊かれたら、”1234567890″と送信する。転送が完了して、プロンプトに戻ってきたら($が返ってきたら)、終了する。

scpでファイル転送したい。パスワードを入力しなくてはならない。コマンド1行で書きたい。
コマンドをセミコロンで区切って1行に書いて、-c オプションとともに、expectコマンドに渡すこともできる。

expect -c "spawn scp /tmp/zzzz.file xxxxxx@192.168.123.123:/tmp ; expect password ; send 1234567890 ; expect $ ; exit"

他にも書き方例

複数行で書く場合はブレース{}で囲む。1行で書けるときは付けない。

expect -c でずるずるっと1行で渡すとき、

expect -c "set timeout 2 ; spawn ssh root@192.168.0.123 ; expect yes { send 123\r } password { send 123\r } ; exit"

1行に書くのなら並べればいい。

expect yes { send 123\r } password { send 123\r };

こうやって {}で囲んで書くのは、1行に収まらないとき。

spawn ssh root@192.168.0.123
expect {
    yes {send 123\r; exp_continue}
    password {send 123\r}
}

expect 全体への引数が 1 行に収まらなかった場合は、引数を”ブレース”することで、各行の終りにバックスラッシュをつけるのを避けることができる。

http://linuxjm.sourceforge.jp/html/expect/man1/expect.1.html

関連するメモ

コメント(7)

分かりづらい 2011年8月25日 10:02

もっと分かりやすい使い方にしてください。

分かりづらくてうまくいかず、迷惑をこうむっています

おまえが迷惑 2011年9月4日 06:15

>もっと分かりやすい使い方にしてください。
>
>分かりづらくてうまくいかず、迷惑をこうむっています

こんな不愉快なコメントを残すおまえの方が迷惑です。

わかりにくくないです。 2012年2月9日 16:30

充分わかります。てか、助かりました。ありがとござます。

有用 2018年12月24日 12:47

他のサイトにはない、便利な書き方まであって有用です。

大変助かりました 2021年2月17日 14:04

分かりやすい例もあり大変参考になりました。ありがとうございました。
自分で努力せず人のせいにする輩は気にしなくて良いと思います。

匿名 2022年6月22日 17:50

10年経っても刺されている1コメが草。
助かりました。

Thanks 2022年12月26日 13:03

Thanks!