質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

2526閲覧

TeraTermマクロ:if文 filesearchのresultの値が0しか返却されません

tatan

総合スコア2

Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2023/10/11 03:18

実現したいこと

TeraTermマクロにおいて、filesearchコマンドを利用してif文を作成したいです。

前提

filesearchコマンドにより指定したファイルを検索し、存在が確認できればresult=1の処理、確認できなければresult=0の処理に向かうif文を作成しています。

発生している問題・エラーメッセージ

・filesearchコマンドにより、 "/home/test/test.lock"を検索、存在を確認できていないのかresult=0しか返却されない。
if result=0の処理しか行われない(result=1の処理が行われない、分岐しない)

該当のソースコード

ttl

1;filesearchはファイルの存在を確認した場合はresult=1, 確認できなかった場合はresult=0が返却 2filesearch "/home/test/test.lock" 3 4;test.lockファイルを確認した場合、シェルを実行せずにマクロを終了 5if result = 1 then 6 endMsg = "test.lockファイルが存在しています。マクロを終了します。" 7 messagebox endMsg "Status" 8 end 9 10elseif result = 0 then 11;yesnoboxは「はい」でresult=1, 「いいえ」でresult=0が返却 12MSG = "「はい」→test.sh実行 「いいえ」→終了" 13yesnobox MSG "Status" 14if result = 0 then 15 end 16else 17 sendln "/home/test/test.sh" 18 end 19endif 20end

試したこと

・「filesearchが機能していないのでは?」「別の場所からresult=0の値が返却されているのでは?」と考え、filesearchの列をコメントアウトした。
結果:filesearch以降の処理が行われなかったため、resultに値が入っていない(=filesearchからresult=0が返却されている)

・"/home/test/test.lock"のパスが誤っている(ファイルが存在していない)のでは?
結論:誤っていない。試しにsendln コマンドで"ls /home/test/test.lock"を送信した際は正しく存在していることが確認できた

・changedirコマンド、sendln "cd"を用いて、Teratermや接続先のカレントディレクトリを変更し、
「filesearch "test.lock"」で実行した。
結果:何も変わらず、result=0のみ返却

・echoやshowlnでデバッグを試みたがUnknown commandとなってしまう...

補足情報(FW/ツールのバージョンなど)

OS:Linux
TeraTermマクロのバージョン:4.97

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatan

2023/10/11 04:19 編集

@setoppu さん 教えていただきありがとうございます。 上記のサイトを参照するとローカル側しかできないみたいですね... 下記の公式のほうにはそのようなことが記載されていなかったため、気が付きませんでした... https://ttssh2.osdn.jp/manual/4/ja/macro/command/filesearch.html 質問の趣旨と異なってしまうのですが、質問の「リモートのファイルの存在有無の確認」からif文を作成できるコマンドや方法があれば助言をいただきたく存じます
guest

回答1

0

ベストアンサー

/home/test/test.lockって、Windowsのファイルじゃなくて接続先のOS上のファイルでは?
TTLマクロの対象はWindows内のファイルです。

接続先のファイルの有無は、sendlnwaitでコマンドの応答を見るのでしょうね。

TTL

1sendln 'test -f /home/test/test.lock ; echo CC=$?' 2wait 'CC=0' 'CC=1' 3messagebox result 'result'

排他チェックは、/home/test/test.shの中でやるのが良い気がしますが。

投稿2023/10/11 04:21

otn

総合スコア86277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatan

2023/10/11 05:13 編集

@otn さん コメントありがとうございます。 otnさんや他の方からも教えていただいた通り、TTLマクロの対象はローカル上でのみということを理解できていませんでした。 上記を参考にif文を作成したのですが、動作に問題が出てしまった箇所があるため改めて別枠で質問を設けて質問させていただきます。
otn

2023/10/11 05:44

> 下記の公式のほうにはそのようなことが記載されていなかったため、気が付きませんでした Teratermで接続先の種類(LinuxとかUnixとかWindowsとかネットワーク機器とか、昔だとパソコン通信とか)が何であるかをTeratermは知りようが無いです。接続先でどのようにして、ファイルの存在確認をするのか、そもそもファイル等と言うものが存在するのかなど、Teratermには預かり知らぬ所です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問