前回はシンプルなマクロに対して、show runを表示させるという動作を追加してみました。
しかし、環境によっては、うまくいかないかもしれない、ということも言いました。
その理由を見ていきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
;/////////////////////////////////// ;Telnetで172.16.0.1のルータにログインし、 ;enableモードまで自動で移行します ;作者Feasible LAB. ;http://teraterm.feasible-lab.com/ ;/////////////////////////////////// connect '172.16.0.1:23 /nossh /T=1' wait 'Password:' sendln 'cisco' wait '>' sendln 'en' wait 'Password' sendln 'cisco' wait '#' sendln 'terminal length 0' wait '#' sendln 'show run' end |
前回までに作成したマクロをおさらいすると、
telnet⇒ログイン⇒enableモードへ移行⇒terminal length 0をたたく⇒show run
を行わせるものでした。
マクロを走らせるとわかりますが、うまく行くときは神速と言ってもいいほどのスピードでshow runが表示されます。
反面、うまく行かないときは、terminal length 0の手前でエラーになったり、show runの手前でエラーになったりすると思います。
特に、遠隔地のルータに対してマクロを動かそうとすると、うまくいかない事が多いかもしれません。
原因は、遅延、なのです。
回線遅延や、処理遅延などがあったりすると、waitコマンドが待ちきれなかったり、まだルータ側が準備できていないのにsendlnコマンドがコマンドを送信したりしてしまいます。
他にもwindows自体の処理だったり、Tera Term自体の処理だったりと、色々な要素で遅延が起きてしまう事があります。
マクロはそんな遅延などおかまいなしにどんどん先に行こうとするので、マクロ自身が行った処理と、その結果に想定外のものがあると、「エラー」という形で返してくる事になります。
では、遅延、があり得る環境においては、どういう風にマクロをくんでいけばよいでしょうか。
エラーになる原因は、「マクロが先に行き過ぎる」わけですから、「待たせれば」いいわけです。
これまで、待たせるコマンドはwaitを使ってきましたが、waitは、画面に特定の文字が表示されるのを「待つ」コマンドでした。
今回は特定の文字が表示されるのを待つのではなく、「特定の秒数待たせる」という事をやらせたいと思います。
そこで、コマンドリファレンスをチェックすると、
それっぽい名前の、それっぽいやつがいます。
pauseは、見るからにpauseしてくれそうですね。同じく赤で囲んだmpauseも、pauseなのですが、少し機能が違います。
では、pauseのリンクを開いて、中身を見てみる事にしましょう。
TTLの実行を休止する、と書いてありますので、我々が求めている要件と合致しそうです。
pauseコマンドは、休止させたい秒数をpause の後ろに記入します。
上の例だと、10秒休止なので、
1 |
pause 10 |
ですね。
5秒休止なら、
1 |
pause 5 |
です。
実際に、pauseをマクロの中に組み込んでいきましょう。
待たせる時間は3秒としておきましょう(本当は1秒でもいいですが、わかりやすく3秒でにしておきます)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
;/////////////////////////////////// ;Telnetで172.16.0.1のルータにログインし、 ;enableモードまで自動で移行します ;作者Feasible LAB. ;http://teraterm.feasible-lab.com/ ;/////////////////////////////////// connect '172.16.0.1:23 /nossh /T=1' wait 'Password:' sendln 'cisco' wait '>' pause 3 sendln 'en' wait 'Password' pause 3 sendln 'cisco' wait '#' pause 3 sendln 'terminal length 0' wait '#' pause 3 sendln 'show run' end |
sendlnで何か文字列を送信する前に、pauseを入れています。
このマクロを実行してみましょう。
先ほどのマクロより、かなり時間がかかるようになったはずですが、エラーになる事はなくなったはずです。
ちなみに、mpauseの説明を既に見たかもしれませんが、mpauseコマンドを使うと、pauseの時間をミリ秒で指定する事ができます。
1秒も待ち時間が長い、というときにはmpauseを使うとよいでしょう。
私も通常はmpauseを使って細かく待ち時間を調整しています。
今回のサンプルマクロを下記においておきます。
次回は、一連の動作を完結させ、マクロを一旦仕上げてみましょう。
ピンバック: 3.4. “exit”を叩いてマクロを終了させる | ゼロから始めるTera Termマクロ