expect コマンド 使い方

sshコマンドを実行する際にパスワード認証方式の場合、パスワードを要求されます。また、sudo、scp、rsyncコマンドでも同様にパスワードを要求されます。

そのようなコマンドを実行する際、パスワードをタイピングすることなく、自動で実行できたら素敵ですよね。

そうしたことを叶えてくれるコマンドであるexpectコマンドを紹介します。

expectコマンドとは

expectコマンドとは、コマンドの返答を認識し、入力をしてくれます。

もし、expectコマンドがインストールされていない場合は、次のコマンドを実行しましょう。

$ sudo apt install expect

構文

以下の構文をシェルスクリプトに書いて実行します。

expect -c "
spawn 実行するコマンド
expect コマンドの返答
send 次のコマンド
expect eof
exit"

具体例

rsyncコマンドの場合

#!/bin/bash

expect -c "
spawn rsync -av hogehoge.txt hoge@hogehoge:/home/hoge/
expect \"hoge@hogehoge's password:\"
send \"hogehoge\n\"
expect eof
exit"

sendの後、パスワードを入力しています。\nは、改行コードです。

\(バックスラッシュ)は、次の(ダブルクォーテーション)を文字として認識するために用いています。

expectの後、""として、ダブルクォーテーションで囲まないとコマンドシェルと勘違いされてエラーになります。

sendの後の""も同様です。

このシェルスクリプトを実行することでパスワードを入力することなくコマンドを実行できます。

まとめ

コマンドを実行する際、パスワードをタイピングすることなく、自動で実行することを叶えてくれるコマンドはexpectコマンドです。