

TeraTermのマクロでの動作の質問です。

Whileでshowコマンドを何秒かごとに流し込む繰り返しを作り、Enterが押されたら抜けるような仕組みを作りたいのですが、IfとWaitを駆使してどうにかならないでしょうか？

イメージでは通常はWaitで一つの `#` を待つところ、Enterを押すことで `#` が2度表示されるので、If文で `#`
が2つ続いたら、Breakするような仕組みは難しいのでしょうか。

[code]

    ;コマンドを繰り返す
    cnt = 1
    while cnt
    
    sendln 'show log | grep up'
    
    wait '#'
    
    sendln 'show log | grep down'
    
    wait '#'
    
    yesnobox 'もう一回？' 'Message'
    
    if result = 0 then
        cnt = cnt - 1
    endif
    
    endwhile
    
    mpause 5000
    
[/code]

現在は方法が分からず、上記のように `yesnobox` で対応しています。  
なお、機器はYAMAHAのFWX-120を使用しています。

何か方法がありましたら、よろしくお願いいたします。


CC BY-SA 4.0
2019-08-13T04:27:30.613
57330
2022-03-28T02:03:05.283
2019-11-20T01:03:16.937
3060
35447
question
teraterm
TeraTerm のマクロで while 文から条件に応じて if 文で抜けるには


何秒か待機する[`mpause`](http://ttssh2.osdn.jp/manual/ja/macro/command/mpause.html)の代替として[`mtimeout`](https://ttssh2.osdn.jp/manual/ja/macro/syntax/variables.html)と[`recvln`](https://ttssh2.osdn.jp/manual/ja/macro/command/recvln.html)を組み合わせることで、割込入力待ちしながら待機できませんか？

下記のコードはlinux上で任意の処理(ここではpingとsleep)と3秒待機を繰り返しながら無限ループしています。  
`check_input`ラベルが呼ばれるたびに3秒まで入力を待ち、その間に空白文字(スペースや改行文字)のみ入力されると正規表現にヒットして`exit`でマクロが終了します。

[code]

    while 1
      sendln 'ping 127.0.0.1 -c 2 -i 0.5' ; 任意の処理
      wait '#' '$'                        ; 処理完了まで待機
      call check_input
    
      sendln 'sleep 1'                    ; 任意の処理その2
      wait '#' '$'                        ; 処理完了まで待機
      call check_input
    endwhile
    
    ; スリープしながら入力チェック
    :check_input
      timeout = 3                         ; タイムアウトを3秒に設定
      recvln                              ; タイムアウトまでスリープしながら入力チェック
      if result = 1 then                  ; 何かが入力された
        strmatch inputstr '.+[$#]\s*$'    ; 末尾が$か#の後に空白文字(スペースや改行文字)のみ
        if result = 1 then                ; 上記正規表現に合致
          exit                            ; マクロ終了
        endif
      endif
      timeout = 0                         ; タイムアウトを無限(初期値)に戻す
      return                              ; 呼び出し元に戻る
    
[/code]


CC BY-SA 4.0
2019-08-20T06:50:55.383
57482
2019-08-20T06:50:55.383
9820
57330
answer