別の Tera Term マクロファイルを読み込む
Tera Term マクロでは、別の Tera Term マクロファイル(.ttl ファイル)を読み込んで、読み込んだファイル内に記述されている処理を実行することが可能です。
大規模なマクロを作成する場合、一つのファイルに全ての処理を記述するのではなく、マクロ処理をモジュール化して別のマクロファイルとして作成し、必要に応じてモジュールを読み込んで処理を実行するという設計にすることが可能です。
ここでは別のマクロファイルを読み込む include コマンドの基礎知識を解説します。
動作確認環境
- Tera Term Version 4.104
マクロファイルを読み込む方法【include】
別の Tera Term マクロファイル(.ttl ファイル)を読み込むためには include コマンドを使用します。
- include <マクロファイルパス>
- <マクロファイルパス>:読み込む .ttl ファイルのパス。絶対パスか、またはマクロファイル格納フォルダからの相対パスで指定が可能
以下のメッセージを表示するマクロ「sample.ttl」があるとします。
messagebox 'メッセージ' 'タイトル'
この「sample.ttl」を読み込み実行するマクロ「main.ttl」の内容は以下の通りです。
include 'sample.ttl'
変数は include されたマクロとの間で共有される
include を使用する場合、変数については以下のように動作します。
- include 実行前に定義された変数を include されたマクロの処理内で使用することが可能
- include されたマクロの処理内で定義された変数を include コマンド実行後にメインマクロの処理で使用可能
以下のメッセージを表示するマクロ「sample.ttl」があるとします。
messagebox message title
このマクロではメッセージとして変数「message」を、タイトルとして変数「title」を使用しますが、変数の定義はしていません。
次に「sample.ttl」を include するマクロ「main.ttl」の内容を以下のようにします。
message = 'メッセージ'
title = 'タイトル'
include 'sample.ttl'
このマクロでは「sample.ttl」を include する前に変数「message」と変数「title」を定義しています。このマクロを実行すると以下のようなメッセージボックスが表示されます。

「sample.ttl」の処理で「main.ttl」内で定義した変数が使用されていることが分かります。
次に、「sample.ttl」の内容を以下のように変数の定義をするだけの内容に変更します。
message = 'メッセージ'
title = 'タイトル'
さらに「sample.ttl」を include するマクロ「main.ttl」の内容を以下のようにします。「main.ttl」内では変数の定義をしていませんが、messagebox にて変数「message」と変数「title」を使用しています。
include 'sample.ttl'
messagebox message title
「main.ttl」を実行すると以下のようなメッセージボックスが表示されます。

include した「sample.ttl」の中で定義した変数の値を「main.ttl」で使用できていることが分かります。
include マクロの処理から抜ける【exit】
include したマクロファイルの処理途中で処理を中止してメインファイルの処理に戻るためには exit コマンドを実行します。
以下は変数 message が未定義の場合エラーとして処理を中止してメインマクロの処理に戻るマクロです。
ifdefined message
if result = 0 then
messagebox '変数messageが未定義です。' 'エラー'
exit ;処理を中止してメインマクロの処理に戻る
else
messagebox message title
endif
【マクロ例】Cisco 機器へのログインをモジュール化する
Cisco 機器に SSH ログインするマクロを、処理項目別にモジュール化してメインマクロからモジュールを include する設計にしてみます。
以下3つのモジュールを作成します。
- sshlogin.ttl
- 対象機器に SSH ログインするモジュール
- startlogging.ttl
- ログ取得を開始するモジュール
- becomeprivilege.ttl
- 特権EXECモードに移行するモジュール
またマクロのフォルダ構造は以下の通りとします。
- ルートフォルダ
- main.ttl ← メインマクロファイル
- module\ ← モジュール格納フォルダ
- becomeprivilege.ttl
- sshlogin.ttl
- startlogging.ttl
各モジュールの内容は以下の通りです。
;;-----------------------------------------
;; SSHログイン用モジュール
;;-----------------------------------------
sprintf2 concmd '%s:22 /ssh /2 /auth=password /user=%s /passwd=%s /nosecuritywarning' address username userpass
connect concmd
;;-----------------------------------------
;; ログ取得開始用モジュール
;;-----------------------------------------
loginfo logfilename
if result <> -1 logclose
getdir logfilepath
gettime timestr '%Y%m%d-%H%M%S.log'
sprintf2 logfilepath '%s\%s_%s' logfilepath hostname timestr
logopen logfilepath 0 0
;;-----------------------------------------
;; 特権EXECモードに移行用モジュール
;;-----------------------------------------
sendln
waitregex prompt_user
flushrecv
sendln 'enable'
wait 'Password:'
flushrecv
sendln enablepass
waitregex prompt_privilege
メインマクロファイル「main.ttl」の内容は以下の通りにします。
;;================================================
;; (1)変数定義パート ※変数の値は接続先に合わせて変更
;;================================================
hostname = 'MyRouter'
address = '10.1.1.1'
username = 'admin'
userpass = 'admin'
enablepass = 'admin'
sprintf2 prompt_user '^%s.*>' hostname
sprintf2 prompt_privilege '^%s.*#' hostname
;;================================================
;; (2)メイン処理パート
;;================================================
include 'module\sshlogin.ttl'
include 'module\startlogging.ttl'
include 'module\becomeprivilege.ttl'
「main.ttl」を実行すると、各モジュールが順に読み込まれ以下の処理が実行されます。
- 対象機器に SSH ログインする
- ログ取得を開始する
- 特権EXECモードに移行する
まとめ
- 別のマクロファイルを読み込むためには include コマンドを使用する
- include されたマクロとメインマクロ間で変数は共有される
- include されたマクロの処理からメインマクロに戻るためには exit コマンドを使用する
- 基礎知識
- コマンド解説
- ログイン
- コマンド実行
- ログ保存
- ファイル・フォルダ操作
- 文字列操作
- 変数関連
- マクロのモジュール化
- テクニック
- サブルーチン
- オリジナルマクロ
コメント