前回は、TeraTermマクロで新規ファイルを作成し、テキストを書き込む方法とコマンドの実行結果を取得する方法をご紹介しました。
今回は、これらを組み合わせて、Linux端末へのコマンドの実行結果をテキストに出力したいと思います。
構成
まず、今回は機能ごとに部品化したマクロを呼び出すため、どのような部品なのかをご説明します。
ソースコードと解説
部品ごとのソースコードと解説になります。
main.ttl
; 実行コマンド execcmd='ls -l /home/' ; 出力ファイル名 txt='teraterm.txt' ; ログインマクロの呼び出し include 'module\login.ttl' ; コマンドの実行結果取得マクロ呼び出し include 'module\get_cmd_result.ttl' ; 書き込み内容のセット data = ret ; テキストへの書き込みマクロ呼び出し include 'module\file_write.ttl' end
まず、「execcmd=’ls -l /home/’」ですが、実行するコマンド[ls -l /home/]を変数[execcmd]に格納しています。
「txt=’teraterm.txt’」は出力するテキストファイル名を指定しています。
ここでは、[teraterm.txt]というファイル名で出力します。
[include]コマンドでは、各部品の呼び出しを行っています。
「data = ret」は、「get_cmd_result.ttl」で取得した結果(変数[ret]に格納されている)を、「file_write.ttl」(変数[data]をテキストに出力する)に渡しています。
login.ttl
; 接続情報 HOST = '192.168.56.105' USER = 'root' PASS = 'root' CMD = HOST strconcat CMD ':22 /ssh /2 /auth=password /user=' strconcat CMD USER strconcat CMD ' /passwd=' strconcat CMD PASS connect CMD wait '#'
接続情報の「HOST」、「USER」、「PASS」は適宜変更して下さい。
また、最後の「wait ‘#’」は、処理待ちになっており、TeraTermのプロンプトが返ってくるまで待っています。プロンプトによっては、文字が[$]になる場合がありますので、そのような場合は変更してください。
ログインマクロについては下記の記事で解説しています。
get_cmd_result.ttl
sendln execcmd recvln recvln strscan inputstr '#' sendln '' while result=0 strconcat ret inputstr strconcat ret #13 recvln strscan inputstr '#' endwhile
「sendln execcmd」で、「main.ttl」で定義したコマンドが実行されます。
コマンドの実行結果を「while」文でループしつつ、変数[ret]に格納しています。
変数[ret]に格納された値は、「file_write.ttl」で出力するため、「main.ttl」で変数[data]に入れ替えています。
複数行のコマンドの実行結果を取得する方法については下記で解説しています。
file_write.ttl
; カレントディレクトリの取得 getdir cd ; テキストファイル出力先の変更 changedir cd ; 空ファイルの作成 fileopen fhandle txt 1 ; 書き込み filewriteln fhandle data
出力するテキストを実行したマクロと同じフォルダにしたかったので、出力先の変更を行っています。
[fileopen]コマンドで、変数[txt]に格納された値のファイル名(今回は、teraterm.txt)で空ファイルを作成し、[filewriteln]コマンドで変数[data]の値をテキストに出力しています。
ファイルの出力については下記の記事で解説しています。
実行結果
ここでは、本マクロで出力したテキストとTeraTermのターミナルに同じコマンドを投入して出力された結果を比べてみたいと思います。(ターミナル側は、ログに出力した値ではなく、画面から直接コピペした値を使用しています)
マクロ
合計 16 drwx------. 15 awx awx 4096 5月 24 2021 awx -rw-r--r-- 1 root root 892 5月 31 2021 data.yml
ターミナル
合計 16 drwx------. 15 awx awx 4096 5月 24 2021 awx -rw-r--r-- 1 root root 892 5月 31 2021 data.yml
両方取得した値は同じですが、1点差異がありました。
ここでは、確認出来ないのですが、改行コードが異なります。
マクロは「CR」、ターミナルは「CRLF」となっているので注意が必要ですね。
記事は以上になります。
これでWindows端末からLinuxサーバの情報を取得すること出来るようになりました。
様々な活用法がありそうで、自動化が捗りそうです。
コメント