expect
expect
は、シェル上での対話的なコマンドライン処理を自動化するためのツールです。
シェルスクリプトでルーチンを自動化したいときに対話的な処理が入ってしまって、どうしても手入力が発生してしまう・・・そんなときに重宝します。
Usage
実行環境はMac OS X High Sierra 10.13.4です。
brew
でGUIツールキットtcl-tk
と、expect
をインストールします。
$ brew install tcl-tk --without-tcllib $ brew install expect --with-brewed-tk
tcl-tk
のインストールは少し時間がかかります。
Source
以下にscp
コマンドでのパスワード入力を自動化するスクリプト例を示します。
#!/bin/bash TARGET="{target_path}" PASSWORD="P@ssw0rd" echo "copy .txt file in '${TARGET}' to remote server ..." expect -c " spawn scp ${TARGET}/*.txt usr01@10.132.235.71:~ expect \"usr01@10.132.235.71's password:\" send \"${PASSWORD}\n\" interact "
expect -c
自動化対象となるコマンドリストを引数にとり、引数のコマンドを実行します。
spawn
expectの引数に渡されたコマンドリスト内で使用します。
対話処理を行うコマンドを引数にして渡すことで、後述するsend
コマンドによる自動嘔吐が可能な状態になります。
send
spawn
コマンドによって実行されたコマンドの対話処理に対して、どのような応答を行うかを定義します。
interact
自動応答処理を終了します。