wait
2024/07/19 12:53
wait 機能
[通信コマンド]文字列を待ちます。
コマンドライン
wait <string1> [<string2> ...]
機能説明
文字列 <string1> [<string2> ...] のうち一つがホストから送られてくるか、タイムアウトが発生するまでマクロを停止させます。文字列は最大 10 個まで指定できます。
空文字列が指定された場合、何か一文字(改行等を含む)を受信した時点で応答があったと判定されます。
システム変数 timeout か mtimeout が 0 より大きい場合、<timeout>.<mtimeout> 秒の時間がすぎるとタイムアウトが発生します。
タイムアウトの値が 0 以下の場合は、タイムアウトは発生しません。
これらのコマンドの実行結果はシステム変数 <result> に格納されます。
なお、<mtimeout> の精度は 50 msec 程度です。
パラメータの説明
指定するパラメータは以下の通りです。パラメータ | 型 | パラメータ説明 |
---|---|---|
<string1> | 文字列 | 待機したい文字列(1つ目)を指定します。 |
<string2> | 文字列 | 待機したい文字列(2つ目)を指定します。 |
<string3> | 文字列 | 待機したい文字列(3つ目)を指定します。 |
<string4> | 文字列 | 待機したい文字列(4つ目)を指定します。 |
<string5> | 文字列 | 待機したい文字列(5つ目)を指定します。 |
<string6> | 文字列 | 待機したい文字列(6つ目)を指定します。 |
<string7> | 文字列 | 待機したい文字列(7つ目)を指定します。 |
<string8> | 文字列 | 待機したい文字列(8つ目)を指定します。 |
<string9> | 文字列 | 待機したい文字列(9つ目)を指定します。 |
<string10> | 文字列 | 待機したい文字列(10個目)を指定します。 |
対象バージョン
全てのバージョンで利用可能です。戻り値
戻り値として以下の変数が定義されます。変数名 | 値 | 意味 |
---|---|---|
result | 0 | タイムアウト。どの文字列も来なかった。 |
1 | <string1> を受信した。 | |
2 | <string2> を受信した。 | |
3 | <string3> を受信した。 | |
4 | <string4> を受信した。 | |
5 | <string5> を受信した。 | |
6 | <string6> を受信した。 | |
7 | <string7> を受信した。 | |
8 | <string8> を受信した。 | |
9 | <string9> を受信した。 | |
10 | <string10> を受信した。 |
関連コマンド
種別:通信 | Ver | 機能の簡易説明 |
---|---|---|
setdebug | 4.64以降 | デバッグモードを設定する。 |
waitln | 文字列を含む行を待つ。 | |
waitregex | 4.21以降 | 正規表現文字列を含む行を待つ。 |
使用方法
使用例
・改行を行い、プロンプトからユーザの権限を簡易判定する場合timeout = 1 sendln wait '#' '$' if result = 1 then messagebox '特権ユーザ' 'プロンプト判定' elseif result = 2 then messagebox '一般ユーザ' 'プロンプト判定' else messagebox '判定に失敗しました' 'プロンプト判定' endif・文字列 "OK" か "ERROR" を待つ場合
; タイムアウトを30秒に設定。 timeout = 30 ; 文字列 "OK" か "ERROR" を待つ。 wait 'OK' 'ERROR' ; タイムアウトなら、:timeout へジャンプ。 if result=0 goto timeout ; "OK" が来たなら、:ok へジャンプ If result=1 goto ok ; "ERROR" が来たなら、:error へジャンプ If result=2 goto error ; 行先頭の ">" か、行末の "complete." を待つ。(ASCIIコード10, 13は LF, CR) wait #10'>' 'complete.'#13 ; タイムアウトを100ミリ秒に設定。 timeout = 0 mtimeout = 100 wait 'server response'・制御コードを待つ場合
; 制御コードを待つ setdebug 2 wait '11 0D 11 0D' setdebug 0・何かしら応答があることを待つ場合
wait '#' '' ; # または、何か出力(入力)されるまで待つ ; 手で # を入力すると 1 が result に入る。 ; 手で # 以外を入力するか、何かの出力があると 2 が result に入る。 messagebox result 'result'
サンプル
サンプルマクロはありません。備考
wait と waitln との違いは、待ちを行う文字列に「改行が含まれるか否か」となります。たとえばプロンプト (コマンド入力の受付) を待ちたい場合に waitln を利用するのは、プロンプトの行末に改行が含まれないことから不適切です。
プロンプトと他の文字列を区別するために ' $' や ' $ ' 等、スペース等を含ませることは有効です。
UNIX / Linux で、どうしてもプロンプトと他の文字列の判別が難しい場合は、環境変数 PS1 でプロンプト自体の出力内容を一時的に変更するなどの措置が有効と思われます。
(~/.bashrc を . で読み込むと、ログイン時の状態に戻ります)