expectで自動化
CVSのリポジトリから最新を取得して、
public_htmlに設定するのを、expectを使って自動化。
以下の事を行う。*1
- 現在の日付を出力
- CVSへの接続
- CVSから最新の取得
- CVSから切断
- 取得したプロジェクト内のCVSフォルダを削除
- 既存のpublic_htmlを日付をつけてリネーム
- 取得したプロジェクトをpublic_htmlにリネーム
update.shとか適当なファイル名で作って実行。
#! /usr/bin/expect -- set timeout -1 #log_file file_name #### Setting #### ## TODO expect で$変数はそのまま使えるのか? ## Repository Name set repositoryName project_name \ #### Setting-END #### puts stdout "HELLO !" puts stdout [clock format [clock seconds] -format {%Y/%m/%d(%a) %p %I:%M:%S}] puts stdout "Try file update." ##-- SU USER --## spawn su - user_name ##-- ##-- CVS_LOGIN --## puts stdout "CVS try login..." spawn cvs -d :pserver:user_name@***.***.***.***:/home/cvs/ login sleep 1 #expect "Logging in to :pserver:user_name@***.***.***.***:2401/home/cvs" expect "CVS password:" send "**********\r" expect eof puts stdout "CVS login sucess." ##-- ##-- CVS_CHECKOUT --## spawn cvs -d :pserver:user_name@***.***.***.***:/home/cvs/ co $repositoryName sleep 1 expect "cvs checkout: Updating " ## TODO CVS名も指定できるように #expect "cvs checkout: Updating project_name" expect eof puts stdout "Checkout OK." ##-- ##--CVS_LOGOUT --## puts stdout "CVS logout..." spawn cvs -d :pserver:user_name@***.***.***.***:/home/cvs/ logout expect "Logging out of :pserver:user_name@***.***.***.***:2401/home/cvs" expect eof puts stdout "CVS logout sucess." ##-- puts stdout "ProjectSetting..." ##--CVS FOLDER DELETE --## puts stdout "CVS System folder delete..." exec find $repositoryName -name CVS -type d | xargs rm -rfv puts stdout "OK." ##-- ##-- OLD FOLDER BUCKUP --## puts stdout "Old folder backup..." set now [clock format [clock seconds] -format {%Y%m%d_%H%M%S}] #puts stdout $now set toFolder public_html append toFolder _ append toFolder $now exec mv public_html/ $toFolder puts stdout "OK." ##-- ##-- New FOLDER MOVE --## puts stdout "New folder move..." exec mv $repositoryName public_html puts stdout "OK." #-- puts stdout "Bye-bye !"
><