expectっていうのを使えばコマンドライン作業の自動化ができそうだったので試してみた。
参考)expectを使って自動化してみよう。 - Qiita
やりたいこと
定型の作業を秘伝のメモを見ながらコマンド入力して行っていたのを、スクリプトポチーで実行できるようにしたい。
スクリプト化しておくことで「実際に動く手順メモ」として利用したい。
定型手順
例: DBに接続して特定の指標データを取ってくる。
expectを使って自動化
expectのインストール
brew install expect
手順スクリプトを書く
get_db_data.tcl
# タイムアウト設定 set timeout 60 # 踏み台にsshする spawn ssh 踏み台host # $が表示されたことを確認する(ログイン成功) expect "$" # DBサーバーへsshする send "ssh DBサーバーhost\n" # $が表示されたことを確認する(ログイン成功) expect "$" # クライアントを使ってdbにログイン send "psql -h localhost -p 5432 -U user名 -d データベース名\n" # passwordが表示されたことを確認する(パスワードが求められている事を確認) expect "password" # 入力のために制御を一旦戻す。入力後制御がスクリプトに戻る interact -nobuffer -re "(.*)\r" return # #が表示されたことを確認する(DBログイン成功) expect "#" # クエリを流してみる send "select count(1) from table;\n" # 制御をこちらに戻して内容を確認する interact
以下のように実行するとスクリプトが実行できる
$ expect get_db_data.tcl
このスクリプトはコンソール上で内容を確認しているが、ファイルに書き出してローカルまで持ってくるようにすることもできそう。
メモ: 変数も使えたりするらしい
set 変数名 値 # セット $変数名 # 出力