要件
ローカルPCでcsvファイルを作成して、Linuxサーバに送信してそのファイルをインプットに処理を実行したい。
引数とかちょっと苦労したので備忘録。
やり方
Tera Termのマクロ機能で自動ログイン→scpでファイル転送→コマンド実行→exitを実行する。
teralogin.ttl
;=====================================================================
; 接続情報 引数[2]~[4]からセット
;=====================================================================
; コマンドオプション組立て
COMMAND = params[2]
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND params[3]
strconcat COMMAND ' /passwd='
strconcat COMMAND params[4]
; 接続
connect COMMAND
;; 接続完了を待つ(環境に合わせて待つ文字列は調整必要)
wait '$'
sendln '. ~/.bashrc'
; ファイル送信完了を確認する
SOURFILE = 'D:\DATA.csv'
DESTFILE = '~/DATA'
;; ファイル送信
scpsend SOURFILE DESTFILE
;; ファイル送信プロセス確認
do
; 5000ミリ秒休止
mpause 5000
sprintf2 str 'ps -ef |grep -v grep |grep -c scp'
sendln str
; 文字列を含む行を待つ
waitln '0' '1'
loop while result != 1
;; ファイル送信が完了すると次のマクロを実行
;;; 実行したいコマンドを記述。
sendln 'chgrp datagrp ' DESTFILE
sendln 'ls -l' DESTFILE
;; マクロ終了
;; 画面を閉じる
;;sendln 'exit'
end
※並行で長時間のscpが動いているとそれに合わせてwaitが掛かり続けます(状況に合わせて調整してください)。
ttlファイルに合わせて、引数を渡す。
マクロファイル名が引数[1]となります。
引数[2]=ホスト名
引数[3]=ユーザー名
引数[4]=パスワード
kidou.bat
rem @echo off
set macro="D:\teralogin.ttl"
"C:\Program Files\teraterm\ttpmacro.exe" %macro% 192.168.77.123 USERID PASSWD
パスワードを都度入力するには
入力ボックスを出して、params[4]の代わりに編集する。
工夫すれば、引数で渡されたら入力は無しにも出来る。
teralogin.ttl(一部)
;; パスワードを要求
inputbox 'パスワードを入力してください' 'TeraTerm ログイン'
PASSWORD = inputstr
strlen PASSWORD
if result = 0 then
messagebox 'パスワードが入力されていません' 'TeraTerm ログイン'
end
endif
; コマンドオプション組立て
COMMAND = params[2]
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND params[3]
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD
;;strconcat COMMAND params[4]
; 接続
connect COMMAND
(以下同じ)