You are not logged in. This forum allows only logged in users to post. If you want to post in the forum, please log in.
Download
Magazine
Develop
Account
Download
Magazine
Develop
Login
Forgot Account/Password
Create Account
Language
Help
Language
Help
×
Login
Login Name
Password
×
Forgot Account/Password
Category:
Software
People
PersonalForge
Magazine
Wiki
Search
OSDN
>
Find Software
>
Terminals
>
Serial
>
Tera Term
>
Forums
>
Help
>
waitregexとrecvlnを続けて書いた場合、waitregexが無限待ちとなる
Tera Term
Description
Project Summary
Developer Dashboard
Web Page
Developers
Image Gallery
List of RSS Feeds
Activity
Statistics
History
Downloads
File Release
List of Releases
Stats
File Storage
Files
Stats
Source Code
Code Repository list
Subversion
View Repository
CVS
View Repository
Ticket
Ticket List
Milestone List
Type List
Component List
List of frequently used tickets/RSS
Submit New Ticket
Documents
Wiki
FrontPage
Title index
Recent changes
Doc Mgr
List Docs
Communication
Forums
List of Forums
Help (428)
Open Discussion (173)
Mailing Lists
list of ML
ttssh2-commit
ttssh2-dev
ttssh2-users
News
Forums:
Help
(Thread #35985)
Return to Thread list
RSS
waitregexとrecvlnを続けて書いた場合、waitregexが無限待ちとなる (2014-09-16 22:04 by
reghorn
#74407)
Create ticket
==========================================================
;; 接続先ホスト/ユーザ名/パスワード設定
HOSTADDR = '<接続先IPアドレス>'
USERNAME = '<接続先ユーザ名>'
PASSWORD = '<接続先パスワード>'
;==============================================
;; ①コマンド組立て
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD
;; ②接続
connect COMMAND
;; ③マクロ本文
wait 'root@'
sendln 'true;echo "STATUS:$?"'
waitregex '^STATUS'
recvln ;これを消すと動く
messagebox inputstr param1
end
==========================================================
お世話になります。
上記のように、waitregexのあとにrecvlnを書くと、waitregexで無限待ちになります。
現象として、後ろに書いたコマンドが原因で先行のwaitregexで無限待ちになるのが理解できないのですが、こちらどのような理由によるものでしょうか。
上記コードの意図としては、元々waitの後にrecvlnを2回書いてinputstrとの文字列比較で処理分けしていたものについて、waitでうまく止まらない場合が散見されたため、waitregexで置き換えようとしたものです。
waitregexでマッチ行がinputstrに入るのでrecvlnがなくても上記処理が可能なことは認識しています。
■環境情報
接続先OS :Cent OS 6.5
Teratermバージョン :4.78
以上、よろしくお願い致します。
Re: waitregexとrecvlnを続けて書いた場合、waitregexが無限待ちとなる (2014-09-16 22:55 by
(del#1144)
#74408)
Create ticket
inputstr に "STATUS:0" とそれに続く改行記号 まで入っていると思います。
次の行でプロンプトが表示され入力待ちになっているところで recvln しても、なにか入力して改行が発生しないとずっと待ったままになります。
===
sendln 'true;echo "STATUS:$?"'
waitregex '^STATUS'
messagebox inputstr matchstr
strlen inputstr
len = result
for i 1 len
strcopy inputstr i 1 sub
str2code c sub
messagebox sub c
next
Reply to
#74407
Re: waitregexとrecvlnを続けて書いた場合、waitregexが無限待ちとなる (2014-09-16 23:09 by
reghorn
#74409)
Create ticket
[メッセージ #74408 への返信]
> 次の行でプロンプトが表示され入力待ちになっているところで recvln しても、なにか入力して改行が発生しないとずっと待ったままになります。
==========================================================
;; ③マクロ本文
wait 'root@'
sendln 'true;echo "STATUS:$?"'
waitregex '^STATUS' ;waitで止まらない場合があるのでwaitregexで置き換え
messagebox inputstr param1
recvln ;これを消すと動く
recvln ;これを消すと動く
messagebox inputstr param1
end
==========================================================
回答ありがとうございます。
結果として、waitregexで待っているわけではなく、recvlnで待ちになっているようでした。
上記のコードで1つ目のウィンドウが表示された後に、エンターを2回入力することで2つ目のウィンドウが表示されることが確認できました。
「MACRO - <マクロファイル名>」のウィンドウ(中断・終了ボタンがあるウィンドウ)下部に表示されたコマンドがwaitregexになっていたので、そこで待ちになっているのだと思ったのですが違ったようです。
以上、よろしくお願い致します。
Reply to
#74408
Re: waitregexとrecvlnを続けて書いた場合、waitregexが無限待ちとなる (2014-09-17 10:29 by
doda
#74410)
Create ticket
[メッセージ #74408 への返信]
> inputstr に "STATUS:0" とそれに続く改行記号 まで入っていると思います。
> 次の行でプロンプトが表示され入力待ちになっているところで recvln しても、なにか入力して改行が発生しないとずっと待ったままになります。
wait した後に recvln した場合は wait で待った文字列が含まれる行が取れますが、waitregex の場合はマッチした文字列の次の行が取れますよね。
これ、なんで動作を変えているんでしたっけ?
wait と waitregex で動作が違うのははまりどころだと思います。
Reply to
#74408
Re: waitregexとrecvlnを続けて書いた場合、waitregexが無限待ちとなる (2014-09-17 12:05 by
(del#1144)
#74411)
Create ticket
> wait した後に recvln した場合は wait で待った文字列が含まれる行が取れますが、waitregex の場合はマッチした文字列の次の行が取れますよね。
> これ、なんで動作を変えているんでしたっけ?
> wait と waitregex で動作が違うのははまりどころだと思います。
waitregex は wait ではなく waitln の仕様と実装をベースにしているのではないでしょうか。
==
cmd = 'true;echo "STATUS:$?"'
sendln cmd
wait 'STATUS:0'
messagebox '' result
recvln
messagebox inputstr ''
sendln cmd
waitln 'STATUS:0'
messagebox inputstr result
recvln ; 何もしないと進まない
messagebox inputstr ''
sendln cmd
waitregex '^STATUS'
messagebox inputstr result
recvln ; 何もしないと進まない
messagebox inputstr ''
==
もしかして waitregexln と命名したほうがよかった?
Reply to
#74410