• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ttlで戻り値を取得する方法)

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

このQ&Aのポイント
  • Teratermmacroを使用して、ローカルからリモートサーバに接続し、コマンドの戻り値を取得したいです。
  • if文の条件式を変えることで戻り値を判別しましたが、必ず0または1の値が返されてしまいます。
  • シェルスクリプトをリモートサーバに配置することはできません。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.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

nan_dato_
質問者

お礼

頂いた内容を合わせて出来ました。ちゃんと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

nan_dato_
質問者

補足

以下で試しましたが、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

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

ちょいと試してみました。 # 接続先はCentOS 6.4のbashです。 ---------------------------------------------------------- setsync 1 sendln 'echo $?' recvln recvln if result = 1 then messagebox inputstr "Result" endif ---------------------------------------------------------- で、falseコマンド実行後は1が、trueコマンド実行後は0が表示されました。 動機モードになっていなかったため、recvlnを実行したときには受信処理が終わっていたのではないでしょうか?

nan_dato_
質問者

補足

条件分岐に0、1をそれぞれ入れて試しましたが、echo の結果が0なのに、if result = 0 thenではなく、if result = 1 thenの分岐に進みました。recvlnの結果がresultに格納されてません。

関連するQ&A