08.CLIST入門⑧

コマンド出力のトラップ

処理の自動化や反復のためにCLISTを作る場合、TSOコマンドの出力を取り込んで、その内容からCLIST内で実行する後続コマンドのパラメータを生成したい、といった場合があります。これはシステム変数 SYSOUTTRAP と SYSOUTLINE で簡単に実現できます。
※SYSOUTTRAP及びSYSOUTLINEは、MVSのTSOでしかサポートされていません。

システム変数「SYSOUTTRAP」と「SYSOUTLINE」

  • SYSOUTTRAP
  • TSOコマンドからの出力をトラップしてメモリー内に保管します。何行分のメッセージを保管したいかをこの変数に設定します。

    TSOコマンドからの出力を100行分メモリー内に保管します。トラップされたメッセージは端末画面には表示されません。

  • SYSOUTLINE
  • トラップされたメッセージが格納される変数です。単にSYSOUTLINEとして参照すると、何行分のメッセージが保管されているかがわかります。保管されたメッセージは、SYSOUTLINEに添え字を付けることで参照できます。例えば、SYSOUTLINE1、SYSOUTLINE21のように記述します。

    何行あるか予測できない場合は、添え字なしのSYSOUTLINEを参照して、格納メッセージ数を求めます。添え字に変数を使用することもできるので、トラップされたメッセージをループの中で順番に処理するような場合に利用できます。

JCLをサブミットしてジョブのSYSOUTを画面に表示する

    SUBMITコマンドの実行結果をトラップして取り込み、サブミットしたジョブの名前とIDを求めます。求めたジョブ名とIDでSTコマンドを実行して、ジョブが終了したかをチェックします。終了していればOUTPUTコマンドでSYSOUT内容を画面に表示します。

    これはサンプルなので、ジョブの終了を知るために、STコマンドを出しながらCLIST内でループしてます。
    実際にはあまりいい方法とは言えないので、DO ENDループのENDの前にREADステートメントを入れて、STコマンドからのメッセージを表示した後に、空エンターするまでループの中で待ちになるようにした方がいいでしょう。

RACFコマンドを発行して、リスト内容からユーザー名称を得る

    RACFのLISTUSERコマンドの実行結果をトラップして取り込み、ユーザーIDに対応して付けられているユーザー名称とその長さを求めます。求めたユーザー名称は後続の処理で利用します。

    USERIDとNAMEはLISTUSERコマンドの出力の先頭行に示されるので、1行分だけメッセージを取り込んでいますが、2行目以降が端末に表示されるわけではありません。SYSOUTTRAPに0以外を指定すると端末へのコマンド結果の出力は抑止されます。