Windows7 64bitでTeraTerm Pro 4.72を使用しています。
TeraTermのマクロを使って目的の処理をするために使用しようとしております。
サーバのコマンドプロンプトは以下の通りです。
[foo@eval ~]$ ※「foo@eval」と最後尾の$はサーバ、ユーザによって変わります。
プロンプトが表示されたらコマンドを発行、プロンプトを待ち、次のコマンドを発行、プロンプト待ち…と言う繰り返しで、例えば以下のようにマクロを組みました。
timeout=5
waitln ']$' ']#'
sendln 'ls -l'
waitln ']$' ']#'
sendln 'pwd'
しかし実際に実行してみると、waitlnで指定したプロンプトが出力されるも認識されず、タイムアウト(5秒)まで待たされると言う状況になっています。
複数サーバで実行し、一般ユーザであったりrootであったりとあるため、プロンプト最後のどのホスト、ユーザでも変わらないプロンプト末尾を部分一致で引っかけようと言う意図で組んだのですが。
どう組めば良いのか、ご教示を頂けますと大変助かります。
waitlnは、「1行読み込んで」=「改行を受け取って」から、、その内容が引数指定のものである行だったら実行終了する命令です。
一方、プロンプト待ちの場合、「]$」のあとの改行がありません。同じ行内でキー入力待ちになっています。そのため、その段階ではまだその行は終わっておらず、waitlnの処理対象にはならないのです。
そういう目的の場合は、waitlnではなくwaitを使うようにしてください。
waitlnは、「1行読み込んで」=「改行を受け取って」から、、その内容が引数指定のものである行だったら実行終了する命令です。
一方、プロンプト待ちの場合、「]$」のあとの改行がありません。同じ行内でキー入力待ちになっています。そのため、その段階ではまだその行は終わっておらず、waitlnの処理対象にはならないのです。
そういう目的の場合は、waitlnではなくwaitを使うようにしてください。
回答ありがとうございます。なるほどそういうことでしたか。waitに直してみます。
waitに書き換えたのですが、結局timeoutまで待たされる事象は変わっていません。どう書けば良いのでしょうか…。
コマンド・プロンプトのマッチングに失敗しているようなので、単純に
wait '$' '#'
sendln 'ls -l'
wait '$' '#'
sendln 'pwd'
でどうでしょうか?
timeoutは不要です。
上手く行ったのですが、$や#だけですと、スクリプト等で使われるコメントアウト文字(#)に反応してしまうようでした。このため、$と#だけは避けるようにしておりました。
回答ありがとうございます。なるほどそういうことでしたか。waitに直してみます。
2012/08/24 01:47:24waitに書き換えたのですが、結局timeoutまで待たされる事象は変わっていません。どう書けば良いのでしょうか…。
2012/08/25 20:07:10