お世話になります。
TeraTarmマクロについて質問させていただきます。
※TeraTarmバージョンは4.79です。
<目的>
Windows環境上のコマンドプロンプトから、TeraTarmマクロ「test.ttl」を介して、
Linux環境上の「test.sh」シェルを引数aaa(TeraTarmマクロから引数引き渡し)指定して実行。
さらに、Linux環境上の「test.sh」の終了コードを、TeraTarmマクロを介して、
Windows上のコマンドプロンプト上(%errorlevel%)で取得。
---【Windows環境 実行コマンド】---
c:\> "C:\Program Files (x86)\teraterm\ttpmacro.exe" C:\test.ttl aaa
---【TeraTarmマクロ test.ttl 記述】---
connect '[Linux環境IP]:22 /ssh /2 /auth=password /keyfile= /user=root /passwd=[rootのパスワード]'
shell = '/tmp/work/test.sh'
sendln 'sh ' shell param2
wait '#'
sendln 'echo $?'
recvln
rtncode=inputstr
wait '#'
setexitcode rtncode
closett
---【Linux環境 test.sh 記述】---
#!/bin/sh
echo $1 > /tmp/work/test.log
<質問>
このとき、下記2点の動作がうまくいきません。
・TeraTarmマクロに指定した引数を、シェルの引数として引き渡せない。
・シェルの終了コードをTeraTarmを介してWindows環境のコマンドプロンプトの
%ERRORLEVEL%に引き渡せない。
試行錯誤してみましたが、私にはどうしても以下のような結果になってしまします。
・/tmp/work/test.logには何も記載が無い。(書き込み権限は付与しています。)
・シェル失敗時のWindows環境(test.ttl)の「echo %errorlevel%」の結果は「0」。
初歩的な事かもしれませんが、どこをどのように直せば目的が果たせるか
ご教示いただければ幸いです。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
このマクロは、ほとんど使った事が無いですが、サンプルと見比べて気がついた点。
http://sourceforge.jp/magazine/10/01/18/105235/3
connectコマンド後の待ち状態をまたずに、sendln で実行しています。どうなんでしょうね。なぜ待ち状態が必要なのか確認してみましょう。ログインすると通常、ユーザーに設定されたシェルが呼びだされます。例えば root のデフォルトで設定されているシェルは/bin/sh /usr/bin/sh /bin/bash。
つまり # の待ち状態ですね。
> 'sh ' shell param2
これはすでに起動されているシェルの中で、新しいシェルをスクリプトファイルを渡して起動しています。必要ですか?
Shellスクリプトに、 #!bin/sh というおまじないを指定しているので、新たにシェルを起動しなくても sh で実行されます。それが csh bash の環境であっても。
まず、その辺から見直してください。これは困っている問題とは、直接的に関係ないかもしれませんが、変???と思われる事柄です。
次に
>%ERRORLEVEL%に引き渡せない。
ですが、どうやっているんですかね?
if errorlevel 2 echo 2
if errorlevel 1 echo 1
などと記述して初めて正確に把握できますが? %ERRORLEVEL%だと確かに拾えますが、前回のエラーコードが格納されていて、直前ではありません。
まず、サンプルをみて、その完コピ(カラオケじゃねっつーの)して、動作をさぐりましょう。上記サイトのscpsendを別コマンドにして。
引数引き渡しは「ttermpro.exe」ではなく「ttpmacro.exe」に関連付けることで出来ました!
しかし、リターンコードを取得することが未だできません。。
> 次に
> >%ERRORLEVEL%に引き渡せない。
> ですが、どうやっているんですかね?
下記の方法で取得を試みてます。上手くいってませんが(涙)
> シェル失敗時のWindows環境(test.ttl)の「echo %errorlevel%」の結果は「0」。
No.2
- 回答日時:
確認ができる環境が無いので、次の方法が正しいかどうかの検証はできていません。
wait '#'
2つありますが、それぞれがズれていないでしょうか?
> sendln 'sh ' shell param2
> wait '#'
で、sh~ 実行終了後のプロンプトを待っているつもりでしょう。
しかし、ログイン直後のプロンプトを待つ前に sendlnが実行されています。
ここでwaitしているのが「ログイン直後のプロンプト」になってませんか?
そうなると
> sendln 'echo $?'
> recvln
このrecvlnで受けとるのは、sendln 'sh ' shell param2の実行結果とか、 コマンドラインそのものだとか、実行直後のプロンプト行とかになってしまうのではないでしょうか。
recvlnで受けとった文字列をmessageboxで表示させる等して確認してはどうでしょうか?
http://ttssh2.sourceforge.jp/manual/ja/macro/com …
また、ログを取ったり、closett をコメントアウトする等して、サーバー側のシェルが実際にどんな動作をしているのか、エラーは出てないか、sh test.sh aaa と正しく実行しているか、等を確認したらどうでしょう?
http://ttssh2.sourceforge.jp/manual/ja/macro/com …
> setexitcode rtncode
通常、終了コードは整数だと思います。
文字列を使って大丈夫ですか?
setexitcode '1'
setexitcode '2'
setexitcode 1
setexitcode 2
それぞれで%ERRORLEVEL% はどうなりますか?
引数引き渡しは「ttermpro.exe」ではなく「ttpmacro.exe」に関連付けることで出来ました!
しかし、リターンコードを取得することが未だできません。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- その他(プログラミング・Web制作) ログインシェル時のSHELL環境変数 1 2022/06/08 19:21
- Excel(エクセル) エクセルのマクロが途中の行から適用されない 2 2022/07/09 20:25
- Excel(エクセル) VBA ワークシート指定の1行目を選択をしたい 2 2022/08/20 18:10
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
- Excel(エクセル) エクセルのマクロが上手く動きません 4 2022/07/14 13:25
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
- その他(ニュース・社会制度・災害) 子どもの自制心が将来を左右するという「マシュマロ実験」が再現に失敗。マシュマロ実験の結論は間違い? 2 2022/09/23 20:24
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AWSでSSH接続をしたいのですが...
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
ssl_error_logのエラー内容(AH...
-
ssl_request_logの必要性について
-
Ubuntu20.04からUbuntu22.04に...
-
Ubuntuで数字だけのユーザーア...
-
lubuntuでフォントをインストー...
-
ubuntuのシャットダウンが進ま...
-
shellscript内のコマンドを、su...
-
Linux Mint 日本語入力できなく...
-
Windowsのローカルディレクトリ...
-
Ubuntu on Xorgのログインについて
-
ubuntuで デイスク/deb/loopと...
-
ubuntuサーバーを久々に再起動...
-
ログにserver reached MaxReque...
-
VirtualBox ゲストOSにPC内蔵HD...
-
次のif文について意味を教えて...
-
AWSのEC2のZabbixユーザーでaws...
-
redmineにメールを飛ばす方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
bashでシングルクォート内の変...
-
ubuntu(linux)のシャットダウン...
-
AWSでSSH接続をしたいのですが...
-
Linuxのパーティション番号の変...
-
ubuntuで デイスク/deb/loopと...
-
自作のウェブサイトを友人に見...
-
ubuntuのシャットダウンが進ま...
-
[Linux初心者]Ubuntu22.04.3LTS...
-
Ubuntu系とCentOS系の違いはな...
-
Ubuntu on Xorgのログインについて
-
Windowsのローカルディレクトリ...
-
tarで纏める際に、複数場外した...
-
Linux のシェルスクリプトの強...
-
Ubuntuで数字だけのユーザーア...
-
linuxサーバーのキャッシュをク...
-
shellscript内のコマンドを、su...
-
ssl_request_logの必要性について
-
ubuntuのサーバー(virtual box)...
-
Kali Linuxで起動できない - Mi...
-
ホストオンリーアダプタで接続...
おすすめ情報