投稿者

Developer Support Engineer at InterSystems Japan
記事 Megumi Kakechi · 3月 2, 2021 3m read

$ZF(-100) で実行したコマンドの結果をファイルに出力する方法

これは InterSystems FAQ サイトの記事です。
 

以下の方法で、$ZF(-100) で実行したコマンドの出力を取得することが可能です。
 

★$ZF(-100) での実行でコマンドキーワードを使用する方法:

/STDOUT や /STDERR などの便利なキーワードを指定して、$ZF(-100) でコマンドを実行することが可能です。

USER>write$zf(-100,"/SHELL/STDOUT=c:\temp\result.log/STDERR=c:\temp\error.log","net","use","\\testsrv\public","/user:testuser","password")
2
USER>!type c:\temp\result.log                                                    

USER>!type c:\temp\error.log
システム エラー 1219 が発生しました。
同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続
は許可されません。サーバーまたは共有リソースへの以前の接続をすべて切断してから、
再試行してください。
USER>write$zf(-100,"/SHELL/STDOUT=c:\temp\result.log/STDERR=c:\temp\err.log","netstat","-anp","tcp")
0
USER>!type "c:\temp\result.log"
アクティブな接続
 
  プロトコル  ローカル アドレス      外部アドレス           状態
  TCP         0.0.0.0:230.0.0.0:0              LISTENING
  TCP         0.0.0.0:800.0.0.0:0              LISTENING
  TCP         0.0.0.0:1350.0.0.0:0              LISTENING
  :
USER>!type "c:\temp\err.log"
USER>

コマンドキーワードについては、以下のドキュメントをご覧ください。
$ZF(-100) で指定できる便利なキーワード
※ /STDOUT と /STDERR に同じファイルを指定した場合、両方のタイプのデータがそのファイルに書き込まれます。


★標準エラー出力(2) を 標準出力(1) へリダイレクトする方法:

以下の方法で、標準エラー出力(2) を 標準出力(1) へリダイレクトし、さらにコマンドの 標準出力 を ファイル(result.log) へ出力する方法が使用できます。

USER>Set st = $ZF(-100, "/shell", "net", "use", "\\server1\Public", "/user:name", "password", ">result.log", "2>&1")
 
USER>write st    // 戻り値が0(成功)以外の時、ログを見て原因を調査してみる2


上記コマンドの場合、実行したネームスペースのデフォルトデータベースのフォルダに result.log が出力されます。
内容は以下のような標準出力が記録されています。

/* result.log */

システム エラー 1219 が発生しました。

同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。サーバーまたは共有リソースへの以前の接続をすべて切断してから、再試行してください。


enlightened【ご参考】
$ZF(-100) で指定できる便利なキーワード

Comments

Megumi Kakechi · 7月 19, 2023

記事後半に、「2>&1」で 標準エラー出力(2) を 標準出力(1) にリダイレクトする方法を追記しました。
 

0