TeraTermマクロでリスト化をして接続先(ホスト名)を選択させるようにして接続をさせたいです。(Linux系サーバなど)そこで、下記URLを参考コピーして試しにやってみましたが、
http://www.j-oosk.com/teraterm/macro-command/706/

実行すると、下記エラーが出てしまい、うまく接続マクロが動いてくれません。
MACRO:Error
Variable not initialized.
<<<if>>> result &gt;= 0 then
<<<else>>>

ただし、このマクロ記述は、パスワードファイルを指定してパスワードを探してくる?
感じかと思いますが、実際には共通のID/パスワードでもOKです。(パターン1)
もしくは、この通りに、ホスト先によってID/パスワードを変更させれると
助かります(推奨:パターン2)

初心者ですが、だれかご教授頂ければ・・・と思います。
よろしくお願いいたします。


⇒同等にマネをして下記ttlマクロを作っています。
;============================================
;; [[初期値設定]]
;; ユーザ名/パスワードファイル設定
USERNAME = 'ユーザ名'
;; パスワードファイル指定
PASSFILE = 'C:\password.dat'
;; 配列設定(接続先IPアドレスを代入)
strdim HOSTNM 3
HOSTNM[0] = 'TEST-HOST1'
HOSTNM[1] = 'TEST-HOST2'
HOSTNM[2] = 'TEST-HOST3'
strdim HOSTIP 3
HOSTIP[0] = '192.168.0.1'
HOSTIP[1] = '192.168.0.2'
HOSTIP[2] = '192.168.0.3'
;============================================
;; 接続先ホスト選択
listbox '接続するホストを選択して下さい' '接続ホスト選択' HOSTNM
if result &gt;= 0 then
HOSTADDR = HOSTIP[result]
else
end
endif

;; パスワード取得(初回は入力要)
getpassword PASSFILE USERNAME PASSWORD

;; 接続用コマンド組立て
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD

;; 接続コマンド実行
connect COMMAND

;; マクロ終了
end

質問者からの補足コメント

  • >htmlの関係で&gt;と書いているだけなのか、
    マクロ中でも&gt;と書いているのか、どっちです?
    ⇒そのまま&gt;と記述コピーをしているだけです。htmlとは一切関係ないです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/02/08 00:00

このQ&Aに関連する最新のQ&A

A 回答 (3件)

コピペして使うときでも、何をやっているかくらいは自分で判断するのがいいですよ。


元のが間違っていて(あるいは故意で)ハードディスクがフォーマットされる、なんてことが無いとも言えないので。

そして、うまく動かないときは、自分で作ったプログラムのつもりで、自分でデバッグしましょう。


こんなところに &gt; とあるのは明らかに間違いです。

おそらく、 > をHTML内に記述するために &gt; としたものがそのまま表示されているのだと思われます。
    • good
    • 0

>⇒そのまま&gt;と記述コピーをしているだけです。



なら、>=と記述して試してみましたか?
    • good
    • 0

><<<if>>> result &gt;= 0 then


><<<else>>>

htmlの関係で&gt;と書いているだけなのか、
マクロ中でも&gt;と書いているのか、どっちです?
マクロはhtml(やxml)ではないのでhtmlエスケープする必要はありませんが。
この回答への補足あり
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qttlで戻り値を取得する方法

Teratermmacroでローカル(cygwin)に入り、サーバ(HP-UX)にリモートで入った後、
コマンドの戻り値で後の行動を操作したいのですが、うまくいきません。
わかる方、教えていただけませんか。

ざっくり以下のようなマクロを組んでいます。

----------------------------------------------------------
sendln 'ssh name@host1'

wait Prompt
sendln 'sendmsg "test"'(のようなコマンド) ←これの戻り値がほしい

if 戻り値 = 0 then
 ○○
elseif 戻り値 = 1 then
 wait Prompt
 sendln 'exit'
 wait Prompt
 sendln 'ssh name2@host2'

以下略
----------------------------------------------------------

上記の「戻り値」をどのようにすれば戻り値で判別してくれるでしょうか。
if文の条件式を $?やresultでやりましたが、どのような戻り値でも
必ず$?は0、resultは1で固定でした。

また、sendmsgとif文の間に以下のように試しましたが、失敗しました。
例1:
----------------------------------------------------------
sendln 'echo $?'
recvln

if inputstr = 0 then ←syntax errorになります。
 ○○
elseif inputstr = 1 then
----------------------------------------------------------

例2:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1247390747参照
----------------------------------------------------------
sendln 'echo $?'
recvln
recvln

hensu=inputstr ←Type mismatch.のエラーになる。 直前にstr2intを入れたりしても駄目でした。
ちなみにsendln 'echo $?'を挟まずsendmsgの直後にrecvlnでも駄目です。

if hensu = 0 then
 ○○
elseif hensu = 1 then
----------------------------------------------------------

host1にシェルスクリプトを入れることは出来ません。

Teratermmacroでローカル(cygwin)に入り、サーバ(HP-UX)にリモートで入った後、
コマンドの戻り値で後の行動を操作したいのですが、うまくいきません。
わかる方、教えていただけませんか。

ざっくり以下のようなマクロを組んでいます。

----------------------------------------------------------
sendln 'ssh name@host1'

wait Prompt
sendln 'sendmsg "test"'(のようなコマンド) ←これの戻り値がほしい

if 戻り値 = 0 then
 ○○
elseif 戻り値 = 1 then
 wait Prompt
 sendln 'exit'
 wait Prompt
...続きを読む

Aベストアンサー

基本方針は、echo $? の出力文字をttlで受信して判定、でいいと思います。

・inputstrは文字列なので、=での比較はできません
strcompareコマンドで比較→変数resultで判定
あるいは
str2int 変数 intputstr で変数に数値化→if 変数=0 等と判定
ということになります。
http://ttssh2.sourceforge.jp/manual/ja/macro/syntax/variables.html
http://ttssh2.sourceforge.jp/manual/ja/macro/command/strcompare.html
http://ttssh2.sourceforge.jp/manual/ja/macro/command/str2int.html


・recvln1つではエコーバックの分を受け取ってしまうようです。
他の出力を受信してしまう場合もあります。
確実にやるなら、目印を付けてwaitでそこまで待つ、というのがいい思います

sendln 'echo "=== EXIT STATUS === : $?"'
wait '=== EXIT STATUS === : '
recvln


・シェルスクリプトを入れることはできなくても、複合コマンドを実行することはできるはずです。
sendln '(sendmsg "test" && echo "==== OK ====") || echo "==== NG ===="'
waitlnで待ち→resultで分岐とできます
http://ttssh2.sourceforge.jp/manual/ja/macro/command/waitln.html

基本方針は、echo $? の出力文字をttlで受信して判定、でいいと思います。

・inputstrは文字列なので、=での比較はできません
strcompareコマンドで比較→変数resultで判定
あるいは
str2int 変数 intputstr で変数に数値化→if 変数=0 等と判定
ということになります。
http://ttssh2.sourceforge.jp/manual/ja/macro/syntax/variables.html
http://ttssh2.sourceforge.jp/manual/ja/macro/command/strcompare.html
http://ttssh2.sourceforge.jp/manual/ja/macro/command/str2int.html


・recvln1つではエコーバ...続きを読む

QTeraTermマクロのinputboxで入力した値をメッセージ確認表示するには?

TeraTermマクロを使用し、inputboxで獲得した値を
確認メッセージ(yesnobox)に表示するにはどのような書き方をすれば良いでしょうか?

;retry
inputbox '該当のインターフェースを入力してください。''input interface'
yesnobox inputstr 'のインターフェースで良いですか?'
if result=0 then
goto retry
else
endif
sendln 'command' ←例えばその後、OKならコマンドを実行。


入力したインターフェースで間違いないか確認表示したいのですが
どのように書けば良いのでしょうか?

上記書き方では間違ってるのでエラーとなってしまいます。

Aベストアンサー

;retry
inputbox '該当のインターフェースを入力してください。''input interface'
mes = inputstr
strconcat mes 'のインターフェースで良いですか?'
yesnobox mes
if result=0 then
goto retry
else
endif

って感じでしょうかね。
一度変数に入れてからstrconcatで連結する。ということに。

Qtera term マクロのinputbox

teratermマクロでinputboxを使い、
機器へ接続しています。
何も入力されない場合、終了させたいのですが、
if inputstr = "" goto end
ではダメみたいなのですが、
どなたか良い方法ございましたら、
ご教授のほど宜しくお願い致します。

Aベストアンサー

strcompare inputstr ''
if result = 0 then
end
で、いけると思います。

参考URL:http://ttssh2.sourceforge.jp/manual/ja/macro/

Q【Teratermマクロ】文字列の一致比較について

If文を用いて、文字列同士が同じかを確かめたいのですが
If文では数字のみしか比較できないらしいということがわかりました。

Teratermの場合、他の方法などで文字列の一致を確認できないのでしょうか?

ご存知の方がいらっしゃいましたら、是非教えて下さい。

Aベストアンサー

そんなあなたに: strcompare

他にも、strmatch(要バージョン4.59以降)などあります。
詳しくは、TTLコマンドリファレンスをご覧ください。

QTeraTermマクロの文字列結合

hostname = "100.100.100.100"
log="20101010"

という変数をteratermマクロで設定しております。
この二つの変数の間に、空白または_(アンダーバー)を一つ入れて

"100.100.100.100_20101010"
という文字列を作成して、変数に格納するなりしたいのです。

ただ、hostname変数とlog変数の中身は変えれないので、
hostname = "100.100.100.100_"や、log="_20101010"の
このやり方以外でお願いします。

ご教授よろしくお願いします。

Aベストアンサー

sprintf2 ver '%s_%s' hostname log

でverに入ります。

Q[teraterm] waitコマンドで停止しない。

お世話になっております。
現在teratermのマクロを作成しているのですが、waitコマンドがうまく動いてくれない箇所があります。
どなたか解決策をご教授いただけないでしょうか。

【質問】
UNIX上にてシェルを実行後、コマンドプロンプトが戻ってきた時点で"echo $?"にてシェルのリターンコードを確認するマクロを作成しています。しかし、シェルの終了に時間がかかるためか、コマンドプロンプトが戻ってくるのを確認せずに"echo $?"を実行してしまっています。

【プログラム(該当箇所)】
timeout=20
sendln 'シェルの実行'
wait ']$ '
sendln 'echo $?'
wait '0'

【コンソール上】
]$ シェルの実行
echo $?
シェルの実行結果
]$

以上、よろしくお願いいたします。

Aベストアンサー

sendln 'シェルの実行'
の直後へ
pause 1
を入れてみてはどうでしょうか。(1秒間停止してつぎへ進みます)

それでだめなら、
wait ']$ '
で]$を待っていますが、シェルの実行中に、この]$がでてないか確認して下さい。
実行後のコマンドプロンプトが、[XXX]になることが決定しているなら
wait '[XXX]'としてみて下さい。XXXはあなたの環境で表示される文字列です。

QTera Termでのコマンド流し込みの際の文字欠け、不要文字挿入

Tera Termを使用してNW機器やサーバにコマンドを投入している時に、必要な文字が欠けたり、不要なスペースが入ることってありませんか?

時々発生して困っています。
そもそも欠けや不要文字の追加が起こるのは防げないのでしょうか。
おもにExcelからペーストしているのですが、これがtxtファイルだったら起こらないのでしょうか?
そもそもTeraTerm以外のコンソールソフトだと起こらないのでしょうか?
「気をつける」とか「長いコマンドの流し込みを行わず、分割する」以外で何か有効な対策はあるでしょうか。

何か情報をお持ちの方がいらっしゃいましたらご協力いただきたくお願いいたします。
(コピー元の記述に誤りが無い、という前提で結構です。)

Aベストアンサー

Excelからコピーするときに、セルの中の文字列をコピーしているのではなく、セル全体をコピーしていませんか?ならば、セルの中の見えない空白がコピーされている可能性があります。他の方も指摘されているように、全角文字になっていることも考えられます。
さらに、一行を複数セルで記述していませんか?もしそうであれば、余分なタブが入ることがあります。

上の問題が無いと仮定した場合、TELNETやSSHで対象機器と接続しているのなら、原理上文字化けや欠落は有り得ないと思います。

USBシリアルポートで対象機器と接続している際に、文字の欠落を経験したことはあります。これは、USBシリアルポートのドライバの問題だと思うのですが、解決策は知りません。レガシーなシリアルポートを使う、くらいですかね。
レガシーなシリアルポートを使った場合でも、入力コマンドに対する応答メッセージが長過ぎる機器の場合は、欠落が起こる場合があります。

ちなみに、ANo.2の意見とは違い、ネットワーク機器の設定変更の際にこそ、コピー&ペーストを使うべきだと考えています。タイプミスやコマンドの入力忘れ、二重入力を防げますから。間違ってペーストするのが怖いのなら、一旦ノートパッドにペーストして確認すればいいと思います。
多少サービスを停止してもいい、という程度の機器なら手入力でもいいですが。
ただ、このあたりはそれぞれに考え方がありますので、自分に合ったやり方(あるいは、自分の所属する組織で定められたやり方)でやればいいと思います。

Excelからコピーするときに、セルの中の文字列をコピーしているのではなく、セル全体をコピーしていませんか?ならば、セルの中の見えない空白がコピーされている可能性があります。他の方も指摘されているように、全角文字になっていることも考えられます。
さらに、一行を複数セルで記述していませんか?もしそうであれば、余分なタブが入ることがあります。

上の問題が無いと仮定した場合、TELNETやSSHで対象機器と接続しているのなら、原理上文字化けや欠落は有り得ないと思います。

USBシリアルポート...続きを読む

Qttlマクロによるディレクトリ配下の取得

シェルスクリプトで、apacheのhtmlディレクトリを取得しバックアップを作成しております。
シェルスクリプトは、ユーザshコマンドによる実行です。(cronでは動かしておりません。)

保存先:/home/test/html_backup/配下
保存ファイル名:yyyymmdd.tar.gz(yyyymmddシェルスクリプト実行日となる。)

よって、/home/test/html_backup/ディレクトリ配下にある複数のバックアップ全てを、
マクロによるscp転送で取得したいと考えています。

同名ファイルが存在する場合は、常に上書きでかまいません。


サーバに接続後、下記コマンドを実行しようと思いました。

wait '$'
scprecv '/home/test/html_backup/*'
scprecv '*' 'c:\temp'


としましたが、うまくマクロが動きません。
sendlnでファイル転送ができることはわかりましたか、
今回やろうとしていることは、複数のバックアップファイルがあるため
自動でsendlnでは難しいと思っております。


どのようにttlを書けば
バックアップファイルを全部取得できるのでしょうか。

ご教授お願いいたします。

シェルスクリプトで、apacheのhtmlディレクトリを取得しバックアップを作成しております。
シェルスクリプトは、ユーザshコマンドによる実行です。(cronでは動かしておりません。)

保存先:/home/test/html_backup/配下
保存ファイル名:yyyymmdd.tar.gz(yyyymmddシェルスクリプト実行日となる。)

よって、/home/test/html_backup/ディレクトリ配下にある複数のバックアップ全てを、
マクロによるscp転送で取得したいと考えています。

同名ファイルが存在する場合は、常に上書きでかまいません。


サーバに接...続きを読む

Aベストアンサー

scprecvで指定するのはファイル名なので、ファイル名を指定しないと駄目でしょう。

ls -1 して、結果を recvln して、scprecv するのでしょうか。

私なら、Teratermを使わずに、Puttyパッケージの pscp (Windows用scpコマンド) を使って、
C:\temp>pscp -r -i id.ppk -P port user@host /home/test/html_backup .
としますね。

WinSCPのコマンドラインオプションでも同様のことは出来ると思います。

QTERA TERMを隠す方法

TERA TERMでマクロを起動した時、
実行結果の画面が出力されますが
これを最小化もしくはバックグラウンドで
見せないように起動する方法があれば
教えてください。
マクロのオプション /V や /I では
見せないようにすることができませんでした、
何か方法があれば教えてくださいませ。

Aベストアンサー

connect '/I xxx.xxx.xxx.xxx'のように
connectのオプションに/Iをつけてください。

QTeratermで、条件分岐させたい

Teratermでサーバに自動ログインし作業するためのマクロを作成中です。
条件分岐が発生するコマンド実行後、ユーザが入力した内容で実行したいと思っています。

例えば、
1.sendln 'yum update パッケージ' を実行。
2..Is this ok [y/N]: と表示されたことを確認後、ユーザーにy か N を問い合わせる。
3.ユーザが入力した内容を元に、sendln でyかNを実行し、アップデートを実行。

teratermマクロでこのようなことは出来ますでしょうか?
ご教授お願いします。

Aベストアンサー

ちゃんと読んでますか?

例えば
http://ttssh2.sourceforge.jp/manual/ja/macro/command/recvln.html
> ホストから一行分の文字を受信し、システム変数 inputstr に格納する。

もう一度、ちゃんと読んでください。
「inputstr に格納する」ってなっている関数がいっぱいあります


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング