本サイトはプロモーションを含みます。

Tera Termマクロで「– More –」を確実に処理する方法

TeraTermマクロを書く上で面倒なもののひとつに「–More–」の処理があります。「–More–」を適切に処理する方法について解説します。

–More–とは

ネットワーク機器でコンフィグを表示させた場合、稀に数万行に及ぶコンフィグを表示させる必要があり、うっかりシリアルコンソール接続でこれをやるとすべて表示させるのに数時間かかります。

そのため大抵はページャー機能が実装されていて、数十行表示すると「–More–」といったメッセージが表示されます。そして、スペースキーを押下すると次のページが表示されるようになっています。

可能であれば「–More–」を無効化する

Cisco機器の場合「terminal length 0」というコマンドで一気にすべての行を表示させる事ができます。

これはメーカーによってコマンドが異なりますし、こういうコマンドが存在しない場合もあります。そのため、TeraTermマクロ側での対処を検討する必要があります。

どのように対処するか

対処方法は「–More–」を受信したらスペースを送信するようにします。問題は冒頭でも述べたとおりメーカーによって表示が異なるため、「–More–」だったり「– More –」のように空白が含まれる可能性があります。そこで、正規表現を使って処理する事にします。

connect '/C=3'

sendln
pause 1

do
    wait 'login:' 'Password:' 'Router#'
    if result == 1 then ;loginプロンプトが表示された場合
        sendln 'foo'
        continue
    elseif result == 2 then ;Passowrdプロンプトが表示された場合
        sendln 'router'
        continue
    endif
loop while result != 3 ;Router#を受信するまでループする

;コンフィグを表示するためにenableモードへ入る
sendln 'en'
wait 'Router(config)#'

;コンフィグを表示するコマンドを送信
sendln 'show running'

do
    waitregex 'Router(config)#' '--¥s*[mM]ore¥s*--'
    if result == 2 then ;Moreを受信た場合の処理
        send ' '        ;スペースを送信
        pause 1         ;次ページが表示される間待つ
    endif
loop while result != 1  ;Router(config)#を受信するまでループする

;以下はログアウト処理
sendln 'exit'
wait 'Router#'
sendln 'exit'

前半部分は「TeraTermマクロでシリアルログインする方法」で紹介したIX2015へシリアルログインするためのTeraTermマクロです。今回もIX2015を例にしました。この機種はCiscoライクでterminal length 0が使えるのですが、例として「–More–」の処理を行っています。

肝心なのは「sendln ‘ ‘」でなく「send ‘ ‘」としている所です。改行まで送信すると上手く動かないケースが多いので、ここはスペースのみ送りましょう。

今回はNEC製のIX2015を例に使用しましたが、ヤマハ製のルーターやCheckPointのファイアウォールなど「–More–」の箇所さえ機器の表示と合わせればどのようなメーカーや機種でも対応させる事ができますので、試してみてください。

今回のサンプルマクロでは「–¥s*[mM]ore¥*–」としており、スペースが有っても無くてもマッチするようにしています。