5,317 瀏覽數

TeraTerm – Macro

以前介紹過 Windows 底下的 PuTTY (the Telnet and SSH client itself) 以及 Linux 底下的 minicom

  • Putty
    因為從 Windows 2003 開始 hyperterminal 就需要從新增移除程式去新增,到了 Windows 2008 之後就再也不提供這一隻程式了,很可惜在我們工作環境還是需要透過序列埠 Serial (Com) port 去和一些設備做溝通,所以介紹他們使用這一套我常用的 PuTTY (the Telnet and SSH client itself)
  • minicom
    Linux 下常用的終端工具程式.
  • Tera Term
    這邊為什麼還要介紹新的終端工具程式 Tera Term 呢!! 除了serial / SSH / telnet 外他還多了 Macro 這個功能, Macro 的功能就是可以依據 Tera Term 終端視窗所顯示的字串來產生相對應的動作.

首先下載 Tera Term 來使用,不用擔心 Tera term 也是免費提供使用的.

Macro

先來看看兩個常用的 TTL Commands

  • waitrecv ‘ [string]' [string length] [start location]

    waitrecv ‘1234567’ 7 1
    

    在 Tera Term 的終端視窗,等待讀取字串,如果字串出現 1234567 且從頭 (1) 完成符合 (7) 個字串 ,就接下來的動作,通常會配合 sendln 送出相對應的動作.

  • sendln ‘ [string]’

    sendln ‘Good’
    sendln \n
    sendln 3
    

    note:
    \n = “Enter”
    3 = Ctrl+C (ASCII)

    sendln  會在 Tera Term 的終端視窗送出相對應的字串或是控制字元,其他控制字元請參考 http://zh.wikipedia.org/wiki/ASCII

  • flushrecv

    flushrecv
    

    有時 Tera term Macro 跑久會出現問題,通常是 Tera term 的輸出太多了,造成 Macro 的誤判,其實也不是誤判而是從主機接收字符被傳輸到 Macro .Macro 會存儲資料在他的緩衝器中.通常是遇到 如“wait”等待命令,Macro 會從緩衝器讀出剛剛儲存的字元.但在緩衝區中的字符有可能發生緩衝區溢出,這時候我們可以透過 flushrecv 命令清除緩衝區的資料來避免這個問題的發生.

  • wait

    ; The timeout limit is 100 msec.
    timeout = 0
    mtimeout = 100
    wait 'server response'
    

    跟 waitrecv 類似,一樣在 Tera Term 的終端視窗,等待讀取字串的出現,可以設定 timeout (mtimeout) 時間,設定方式為 timeout=# 或是 mtimeout=# (秒).

  • pause

    pause 10
    

    很明顯的指令,就是等待什麼事情都不做,單位以秒為計算.

  • 其他常用的 TTL command

範例: 將 ls 執行結果儲存到 C:\temp\ls.org .

changedir 'C:\temp'
filesearch 'ls.org'
if result=0 then
flushrecv
sprintf2 filename 'ls.org'
logopen filename 0 1
pause 5
sendln "ls -lh /"
pause 5
logclose
endif
  • changedir
    系統預設路徑為 TeraTerm 目前目錄,看需求可以自行變更儲存檔案的路徑.
  • filesearch
  • if result=0 then
  • endif
    搜尋檔案是否存在,通常配合 if 使用(還可以搭配 else),result=0 代表該檔案不存在.

  • sprintf2 filename ‘ls.org’
  • logopen filename 0 1
    指定檔案名稱為 ls.org,logopen 就會將 ls -lh 的輸出紀錄到 ls.org 至於參數請參考 logopen
    note: Dos,windows 的換行為 CR/LF 兩個字元,而 UNIX/Linux 只需要 LF.
  • logclose
    最後停止記錄.

發表迴響