![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
約100Mバイトのログファイルの差分をとるため、下記のバッチファイルとteratermマクロを実行させました。
やり方は、差分をとりたい2つのログをfptにてサーバーへ転送し、サーバーでsdiffを実行し、差分結果をftpにてとってくるものです。
バッチファイル
echo open xx.xx.xx.xx > "%~dp0put.txt"
echo abcdef >> "%~dp0put.txt"
echo pwabe >> "%~dp0put.txt"
echo put log1 log1 >> "%~dp0put.txt"
echo put log2 10g2 >> "%~dp0put.txt"
echo quit >> "%~dp0put.txt"
ftp -s:"%~dp0put.txt"
del "%~dp0put.txt"
"c:\ProgramFiles\teraterm\ttpmacro.exe" "%~dp0sdiff.ttl"
cho open xx.xx.xx.xx > "%~dp0get.txt"
echo abcdef >> "%~dp0get.txt"
echo pwabc >> "%~dp0get.txt"
echo get kekka kekka >> "%~dp0get.txt"
echo del log1 >> "%~dp0get.txt"
echo del log2 >> "%~dp0get.txt"
echo quit >> "%~dp0get.txt"
ftp -s:"%~dp0get.txt"
del "%~dp0get.txt"
exit/b
teraterm macro (sdiff.ttl)
connect'xx.xx.xx.xx.:xx/ssh/2/auth=/user=abcdef/passwd=pwabc'
wait'$'
sendln 'sdiff logl log2 > kekka'
sendln 'mv kekka kekka1'
sendln 'perl -pe "s/\n\r\n/"kekka1 > kekka'
wait'$'
sendln 'rm kekka'
sendln 'rm kekka1'
Sendln 'logout'
end
ここから相談です。
ftpでgetしてきた差分は、ログの頭から3分の1程度しかなく、全ての差分をとることができませんでした。
調査したところ、サーバー側はログ全ての差分を取れていることを確認しました。
なぜ、ftpで作業結果をgetすると、3分の1しかないのか原因がわからないまま、試行錯誤で対処方法を見つけたのが次の方法です。
方法1(teraterm macroの変更1)
次のようにwait'$'を追加する。
sendln 'sdiff logl log2 > kekka'
wait'$'
sendln 'mv kekka kekka1'
wait'$'
sendln 'perl -pe "s/\n\r\n/"kekka1 > kekka'
方法2(teraterm macroの変更2)
次のように20秒のpauseをとる。
sendln 'sdiff logl log2 > kekka'
pause 20
sendln 'mv kekka kekka1'
方法1も方法2もタイミングを取るような方法ですが、このやり方で、なぜftpでgetした差分結果が正常(ログすべての差分が取れている)になるのかがわかりません。本当にこの対処でよいか判断できません。
どなたか上記方法でよい理由がお解りでしたら、教えてください。
No.2ベストアンサー
- 回答日時:
待ちが無い、ということは、キーの先行入力が行われている、ということになります。
先行入力されたコマンドが実際に実行されるのは、シェルの入力待ちになってからですが、TeraTermのマクロの実行は、明示しない限り先に進みます。
sendlnで送信されるのは一瞬です。
sendln 'sdiff logl log2 > kekka' → sdiffの実行が始まる
sendln 'mv kekka kekka1' → その間にキーの先行入力が行われる(一瞬)
sendln 'perl -pe "s/\n\r\n/"kekka1 > kekka' → その間にキーの先行入力が行われる(一瞬)
wait'$' → perlの終了待ちのつもりかもしれないが、実は、sdiffやmvの終了待ちになってしまっている
sendln 'rm kekka' → これが実行されているつもりが、実際は、前のコマンドが順番に実行されている途中。先行入力に溜るだけ
sendln 'rm kekka1' → これが実行されているつもりが、実際は、前のコマンドが順番に実行されている途中。先行入力に溜るだけ
Sendln 'logout' → これが実行されているつもりが、実際は、前のコマンドが順番に実行されている途中。先行入力に溜るだけ
end → logout後にttpmacro.exeを終了しているつもりが、実際は、前のコマンドが順番に実行されている途中。
↓
ttpmacroが終了したので、ftpの実行開始
→ ttpmacroで実行すべきコマンドがまだ完了していないため、処理途中の状態のファイルをgetしている
ということでは。
waitを入れることで、プロンプトが表示される=コマンドが終了するのを待って、次のコマンドを実行するので、確実に処理が終った状態で、ftpのgetに進めるのだと思います。
あれ?
よく見ると、このマクロ、getしたいファイルまで消してしまってますよね。
ということは、rm kekkaを実行して、実際にアクセスできなくなるまでの微妙なタイミングでftpでget「できてしまっている」ようです。
ご教授ありがとうございました。
理解できました。
>あれ?>よく見ると、このマクロ、getしたいファイルまで消してしまってますよね。>ということは、rm kekkaを実行して、実際にアクセスできなくなるまでの微妙なタイミン>グでftpでget「できてしまっている」ようです。
すみません。都合があり、手入力で質問したため、余分に入ってしまいました。
実際は、rm kekkaはやっていません。
No.1
- 回答日時:
> sendln 'rm kekka'
せっかく作った差分ファイルを直後に消しているように見えますが。
他にも空白の欠けや意味不明のPerlコード(意味不明というかエラー)などもありますが、見ながら手打ちで投稿してタイプミスしたのですか?
コピーペーストで投稿した方が良いですよ。
不正確な情報ではアドバイス不能です。
この回答への補足
>> sendln 'rm kekka'
>せっかく作った差分ファイルを直後に消しているように見えますが。
すみません。都合があり、手入力で質問したため、余分に入ってしまいました。
コピーペーストするようにしたいと思います。
>> sendln 'rm kekka'
>せっかく作った差分ファイルを直後に消しているように見えますが。
すみません。都合があり、手入力で質問したため、余分に入ってしまいました。
コピーペーストするようにしたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP a href リンクタグでだけで 送信が できちゃっています。 1 2022/04/18 04:25
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- その他(プログラミング・Web制作) ファイル名の一部をbatで変更したい batファイルを使って、以下のようにファイル名の一部を変更した 3 2023/02/21 20:09
- オープンソース Coinmarketcap api 1 2022/05/30 15:47
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル内置換
-
exeファイルの実行結果をテキス...
-
C言語コンパイラ・デバッガをご...
-
ソフトのインストール場所って...
-
Macの手書き漢字入力ツールにつ...
-
リモートアクセスについて教え...
-
音楽ダウンロードしたものをCD...
-
Adobe のアプリを中古売買する...
-
フロッピーディスクの読み込み方法
-
PowerMac G5(M9393)のクラシッ...
-
DebianのApache(掲示板)CGIエ...
-
iTuneのアンインストールの仕方
-
UNIXのPerl環境
-
Httpステータス500 InternalSer...
-
誰かにサーバにあるデータを消...
-
/usrがいっぱいになって。mount...
-
aptでインストールしたプログラ...
-
VBAのRegExpで後方一致/不一致...
-
【【大至急】】Qmailが起動しない
-
アラビア文字のホームページを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル内置換
-
exeファイルの実行結果をテキス...
-
コマンド実行結果のファイル出力
-
USBメモリ内のバッチで書き出す...
-
batファイル 行った履歴をテキ...
-
batが動かない
-
【Mac/Xcode】カレントディレク...
-
メーリングリスト宛てのメール...
-
ftpのgetが正常できる方法について
-
C言語コンパイラ・デバッガをご...
-
ldapユーザ登録について
-
PowerShellで自分が書いたコマ...
-
デバッグ停止中 一つ戻る
-
Win7でコンピュータ名変更を自動で
-
cron で rsync が実行できない
-
プログラムでTAを制御するコマ...
-
linuxのsshの反応が非常に遅い。
-
VBSでのファイル読込、出力操作...
-
pythonで業務効率
-
linux勉強中の質問です。
おすすめ情報