【TeraTermマクロ】コマンドの実行結果をテキストに出力する


この記事はプロモーションを含みます。

Linux

前回は、TeraTermマクロで新規ファイルを作成し、テキストを書き込む方法とコマンドの実行結果を取得する方法をご紹介しました。
今回は、これらを組み合わせて、Linux端末へのコマンドの実行結果をテキストに出力したいと思います。

構成

まず、今回は機能ごとに部品化したマクロを呼び出すため、どのような部品なのかをご説明します。

  • main.ttl:実際に実行するマクロ。ここから各部品を呼び出す。
  • login.ttl:ログイン用マクロ。情報を取得するサーバへのログイン処理を行う。
  • get_cmd_result.ttl:コマンドの実行結果取得マクロ。接続先のサーバにコマンドを実行し、コマンドからの実行結果を変数に格納する処理を行う。
  • file_write.ttl:テキストへ書き出しマクロ。渡されたテキストデータをファイルに出力する。

ソースコードと解説

部品ごとのソースコードと解説になります。

ソースコードを解説するにあたり、重要なポイントがあります。
それは、TeraTermマクロにおける変数は全てグローバル変数だということです。
グローバル変数とは、どこからでも参照・変更が可能な変数を指します。
なので、マクロの構造が大きくなると、変数の管理が難しくなります。
複数のマクロで同じ変数名で変数を定義すると予期しない動作になる可能性があるので注意が必要です。

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サーバの情報を取得すること出来るようになりました。
様々な活用法がありそうで、自動化が捗りそうです。

コメント

タイトルとURLをコピーしました