- ベストアンサー
ttlで戻り値を取得する方法
- Teratermmacroを使用して、ローカルからリモートサーバに接続し、コマンドの戻り値を取得したいです。
- if文の条件式を変えることで戻り値を判別しましたが、必ず0または1の値が返されてしまいます。
- シェルスクリプトをリモートサーバに配置することはできません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
基本方針は、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
その他の回答 (1)
- Wr5
- ベストアンサー率53% (2173/4061)
ちょいと試してみました。 # 接続先はCentOS 6.4のbashです。 ---------------------------------------------------------- setsync 1 sendln 'echo $?' recvln recvln if result = 1 then messagebox inputstr "Result" endif ---------------------------------------------------------- で、falseコマンド実行後は1が、trueコマンド実行後は0が表示されました。 動機モードになっていなかったため、recvlnを実行したときには受信処理が終わっていたのではないでしょうか?
補足
条件分岐に0、1をそれぞれ入れて試しましたが、echo の結果が0なのに、if result = 0 thenではなく、if result = 1 thenの分岐に進みました。recvlnの結果がresultに格納されてません。
お礼
頂いた内容を合わせて出来ました。ちゃんとResult2とでました。ありがとうございます! sendln 'tail bbb && echo "==OK==" || echo "==NG=="' wait '==' recvln recvln waitln '==OK==' '==NG==' if result = 0 then messagebox inputstr "Result" elseif result = 1 then messagebox inputstr "Result1" elseif result = 2 then messagebox inputstr "Result2" endif
補足
以下で試しましたが、bbbが存在しなく、echoの結果がNGとでたのに、Result1と表示されました。 sendln 'tail bbb && echo "==OK==" || echo "==NG=="' waitln '==OK==' '==NG==' if result = 0 then messagebox inputstr "Result" elseif result = 1 then messagebox inputstr "Result1" elseif result = 2 then messagebox inputstr "Result2" endif