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

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

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

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

Linux

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

マクロ

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

Q&A

解決済

3回答

17230閲覧

teratermマクロ lsの結果をファイルに落としたい

tamina

総合スコア136

Tera Term

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

Linux

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

マクロ

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

0グッド

1クリップ

投稿2020/01/20 02:37

現在、teratermマクロを作成しているのですが、
lsの結果をファイルに落とそうとしてうまくいっていません。

実際に作成しているマクロは以下の通りです。

filecreate fhandle_log "test.txt" setsync 1 sendln 'ls -lrt | tail -5' recvln;エコーバックの読み捨て result=1 while result==1 recvln filewriteln fhandle_log inputstr strscan inputstr 'root@' endwhile setsync 0

上記の結果では、lsの結果が1行しか取得できません。
分かる方がいましたら教えてください。

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

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

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

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

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

guest

回答3

0

ベストアンサー

既に yureighost さんが書かれていますが、一行だけになるのは strscan は該当する文字列が無い時は0を返すからです。
そして while result == 0 に変えた場合、今度はプロンプトの行で改行が行われないので recvln でプロンプトの行が読めず止まってしまいます。

こういう場合は timeout を設定する事が多いですが、あえて timeout に頼らない案を出してみます。
ls の出力の後ろにマークとなる行を出力して、その行の前までを書き込むという方法です。

ttl

1filecreate fhandle_log "test.txt" 2 3setsync 1 4 5sendln 'ls -lrt | tail -5; echo "=== End of ls ==="' 6recvln;エコーバックの読み捨て 7 8do 9 recvln 10 strcompare inputstr "=== End of ls ===" 11 if result == 0 break 12 13 filewriteln fhandle_log inputstr 14loop 15 16fileclose fhandle_log

投稿2020/01/20 04:58

doda

総合スコア947

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

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

tamina

2020/01/20 08:30

期待通りの動作が出来ました。 ありがとうございました。
guest

0

teratermのログ出力(logopen、logcloseコマンドあたり)で代用できないでしょうか

投稿2020/01/20 04:11

yukky1201

総合スコア2751

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

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

tamina

2020/01/20 04:53

いろんなサーバーにアクセスして同じことやろうとしてるので、一回一回別のファイルとして保存したいという背景があるのでできません。
yukky1201

2020/01/20 06:16

??? filecreate fhandle_log "test.txt" すべて同じファイルを作成するようにしているように思えますが。 logopen時に任意のログファイル名を指定できます。
tamina

2020/01/20 07:05

本当は、各サーバーにtelnetしたりなど、もうちょっと長いマクロなのですが質問したいところだけ抜き出してコマンドも少し修正して投稿してます。 デフォルトでteratermのログファイルを出しているので、そっちの出力も持ってかれないか心配です。
guest

0

recvlnでホストから受信できるのは一行分で、
lsの結果には'root@'文字が含まれていないため一行読んだところで
strscan処理でresultに0の結果が返ってしまうのが原因ですね。

そして対案ですが個人的に思いついた方法としてはタイムアウトを設定しておけば
recvlnで受信ができなくなったところでresultが0になるというものです。

ttl

1filecreate fhandle_log "test.txt" 2 3setsync 1 4 5sendln 'ls -lrt | tail -5' 6recvln;エコーバックの読み捨て 7 8timeout=1 9result=1 10 11while result==1 12 recvln 13 filewriteln fhandle_log inputstr 14endwhile 15 16setsync 0 17 18fileclose fhandle_log

これでとりあえずはwhileで無限ループになることなく処理を終了させることはできます。

投稿2020/01/20 03:52

yureighost

総合スコア2183

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

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

tamina

2020/01/20 04:55

ありがとうございます。 lsの結果が結構長いので、タイムアウト値チューニングが必要そうです。 他に手段が無ければ、この方法で行こうと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問