USSからREXX, シェル・スクリプトでz/OSを操作する

#はじめに
以下の記事で、teratermでUSSに接続すると色々便利なことがありますよ、という紹介をしましたが、REXX + シェル・スクリプトで実現できる便利な使い方をいくつか紹介します。
参考: [z/OSのユーザー・インターフェースについて考える ～teraterm利用のすゝめ～](http://qiita.com/tomotagwork/items/5ae230c7a215f6ef4409)

※筆者はシェル・スクリプトはそこそこ慣れ親しんでいるのですがREXXは全くの初心者です。そのため、USSからMVSへの連携部分について最低限必要な所のみREXXを使い、それ以外はシェル・スクリプトを使うという感じになっています。
※各ソースはGitHubにアップしてますのでご自由にお使いください。ただしエラーハンドリングとか細かいところは行き届いていないです。あくまで作業効率アップの補足ツールとしての位置づけですのであしからず。

#USSからSDSFコマンドを実行する

##SDSFコマンド実行用REXX

これは上の参考記事でも紹介したやつです。

[sdsf.rexソース](https://github.com/tomotagwork/Q01/blob/master/USS_REXX/sdsf.rex)

出来る事:
>USSからSDSFコマンドが実行できます。カタプロの実行など(S PROC)もできます。要はSDSFで/(スラッシュ)付で実行するコマンドが投入できます。

使い方: 
>$ sdsf.rex '\<sdsf command>'
>(SDSFコマンドの先頭にスラッシュ'/'は付けない！)

例: 
>$ sdsf.rex 'D A,L'

時刻を表示する「D T」コマンドの実行例

```xxx:実行例
[CICS004@EPLEX1:/u/cics004/REXX] ./sdsf.sh D T

```

パスを通してalias切っておくと、こんな感じでも使えます。

```xxx:実行例
[CICS004@EPLEX1:/u/cics004] sdsf D T
RC:  0
ISFMSG:   COMMAND ISSUED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: D T.
ISFMSG2.3 : ISF766I Request completed, status: COMMAND ISSUED.
ZOS1      2016264  16:00:13.05             ISF031I CONSOLE CICS004 ACTIVATED
ZOS1      2016264  16:00:13.05            -D T
ZOS1      2016264  16:00:13.05  STC04838   IEE136I LOCAL: TIME=16.00.13 DATE=2016.264  UTC: TIME=07.00.13 DATE=2016.264
```

##SDSFコマンドをまとめて投入するシェル・スクリプト

上のSDSF実行用REXXを使って、複数SDSFコマンドをまとめて実行するためのシェル・スクリプトです。

[exec_command_list.sh ソース](https://github.com/tomotagwork/Q01/blob/master/USS_Shell/exec_command_list.sh)

先頭の```sdsf_rexx=$HOME/REXX/sdsf.rex```部分にて、SDSFコマンド実行用REXXのパスを適宜修正して下さい。

出来る事:
>別途用意したSDSFコマンドのリスト(1行に1コマンドを記入したテキスト・ファイル)を読み込ませて逐次実行する。

使い方: 
>$ exec_command_list.sh \<SDSF_command_list_file>

例: 
>$ exec_command_list.sh command_list_test.txt


```xxx:実行例
[CICS004@EPLEX1:/u/cics004/Shell] cat command_list_test.txt
D T
D M=STOR
D OMVS

[CICS004@EPLEX1:/u/cics004/Shell] ./exec_command_list.sh command_list_test.txt
0 : D T
1 : D M=STOR
2 : D OMVS
number of commands: 3


************************************************************************************
Next Command (1/3):  D T
************************************************************************************
RC:  0
ISFMSG:   COMMAND ISSUED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: D T.
ISFMSG2.3 : ISF766I Request completed, status: COMMAND ISSUED.
ZOS1      2016264  16:01:43.01             ISF031I CONSOLE CICS004 ACTIVATED
ZOS1      2016264  16:01:43.01            -D T
ZOS1      2016264  16:01:43.01  STC04838   IEE136I LOCAL: TIME=16.01.43 DATE=2016.264  UTC: TIME=07.01.43 DATE=2016.264


************************************************************************************
Next Command (2/3):  D M=STOR
************************************************************************************
RC:  0
ISFMSG:   COMMAND ISSUED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: D M=STOR.
ISFMSG2.3 : ISF766I Request completed, status: COMMAND ISSUED.
ZOS1      2016264  16:01:44.06             ISF031I CONSOLE CICS004 ACTIVATED
ZOS1      2016264  16:01:44.06            -D M=STOR
ZOS1      2016264  16:01:44.25             IEE174I 16.01.44 DISPLAY M 032
                                           REAL STORAGE STATUS
                                           ONLINE-NOT RECONFIGURABLE
                                               0M-8192M
                                           ONLINE-RECONFIGURABLE
                                               NONE
                                           PENDING OFFLINE
                                               NONE
                                           STORAGE INCREMENT SIZE IS 1M


************************************************************************************
Next Command (3/3):  D OMVS
************************************************************************************
RC:  0
ISFMSG:   COMMAND ISSUED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: D OMVS.
ISFMSG2.3 : ISF766I Request completed, status: COMMAND ISSUED.
ZOS1      2016264  16:01:45.31             ISF031I CONSOLE CICS004 ACTIVATED
ZOS1      2016264  16:01:45.31            -D OMVS
ZOS1      2016264  16:01:45.33             BPXO042I 16.01.45 DISPLAY OMVS 036
                                           OMVS     0010 ACTIVE             OMVS=(01,FS)
```

command_list_test.txtに書かれたコマンド(上の例だと3つ)が続けてバババッと実行されます。

##SDSFコマンドをまとめて投入するシェル・スクリプト(確認付)
上の例だと、コマンドの結果によらず立て続けに全てのコマンドが実行されてしまいます。各コマンドの結果を確認して、その都度次のコマンドを実行するかどうかの確認を行うプロンプトを表示するバージョンも作ってみました。

[exec_command_list_prompt.sh ソース](https://github.com/tomotagwork/Q01/blob/master/USS_Shell/exec_command_list_prompt.sh)

使い方は上と同様ですが、各コマンド実行前にプロンプトが出て処理が止まるので、コマンドを実行するかスキップするか終了するかを選択できます。


```xxx:実行例
[CICS004@EPLEX1:/u/cics004/Shell] cat command_list_test.txt
D T
D M=STOR
D OMVS

[CICS004@EPLEX1:/u/cics004/Shell] ./exec_command_list_prompt.sh command_list_test.txt
0 : D T
1 : D M=STOR
2 : D OMVS
number of commands: 3


************************************************************************************
Next Command (1/3):  D T
Execute this command: [enter]  /  Skip this command : s  / Finish this script: f
************************************************************************************
Input>
--- Execute this command ---
RC:  0
ISFMSG:   COMMAND ISSUED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: D T.
ISFMSG2.3 : ISF766I Request completed, status: COMMAND ISSUED.
ZOS1      2016264  16:04:19.53             ISF031I CONSOLE CICS004 ACTIVATED
ZOS1      2016264  16:04:19.53            -D T
ZOS1      2016264  16:04:19.53  STC04838   IEE136I LOCAL: TIME=16.04.19 DATE=2016.264  UTC: TIME=07.04.19 DATE=2016.264


************************************************************************************
Next Command (2/3):  D M=STOR
Execute this command: [enter]  /  Skip this command : s  / Finish this script: f
************************************************************************************
Input>s
--- Skip this command ---


************************************************************************************
Next Command (3/3):  D OMVS
Execute this command: [enter]  /  Skip this command : s  / Finish this script: f
************************************************************************************
Input>
--- Execute this command ---
RC:  0
ISFMSG:   COMMAND ISSUED
ISFMSG2.1 : ISF776I Processing started for action 1 of 1.
ISFMSG2.2 : ISF769I System command issued, command text: D OMVS.
ISFMSG2.3 : ISF766I Request completed, status: COMMAND ISSUED.
ZOS1      2016264  16:04:27.10             ISF031I CONSOLE CICS004 ACTIVATED
ZOS1      2016264  16:04:27.10            -D OMVS
ZOS1      2016264  16:04:27.11             BPXO042I 16.04.27 DISPLAY OMVS 045
                                           OMVS     0010 ACTIVE             OMVS=(01,FS)
```

#USS上でのJOBLOG関連操作
##USSからJOBLOGを参照する

USSからJOBLOGを参照するためのREXXです。

[joblog.rexソース](https://github.com/tomotagwork/Q01/blob/master/USS_REXX/joblog.rex)

出来る事:
>指定したJOBIDのJOBLOGを標準出力に表示します。

使い方: 
>$ joblog.rex \<JOBID\>

例: 
>$ joblog.rex JOB04854

LISTCATをするJCLのJOBLOG参照例

```xxx:実行例
[CICS004@EPLEX1:/u/cics004/REXX] joblog.rex JOB04854
isfmsg2.1 is: ISF767I Request completed.
LISTC JOB04854 CICS004
1                      J E S 2  J O B  L O G  --  S Y S T E M  Z O S 1  --  N O D E  E P L E X
0
 16.16.29 JOB04854 ---- TUESDAY,   20 SEP 2016 ----
 16.16.29 JOB04854  IRR010I  USERID CICS004  IS ASSIGNED TO THIS JOB.
 16.16.29 JOB04854  ICH70001I CICS004  LAST ACCESS AT 15:59:00 ON TUESDAY, SEPTEMBER 20, 2016
 16.16.29 JOB04854  $HASP373 LISTC    STARTED - INIT 1    - CLASS A        - SYS ZOS1
 16.16.29 JOB04854  IEF403I LISTC - STARTED - TIME=16.16.29
 16.16.29 JOB04854  -                                      -----TIMINGS (MINS.)------                          -----PAGING COUNTS----
 16.16.29 JOB04854  -STEPNAME PROCSTEP    RC   EXCP   CONN       TCB       SRB  CLOCK          SERV  WORKLOAD  PAGE  SWAP   VIO SWAPS
 16.16.29 JOB04854  -GO                   00     78     15       .00       .00     .0           775  BATCHWL      0     0     0     0
 16.16.29 JOB04854  IEF404I LISTC - ENDED - TIME=16.16.29
 16.16.29 JOB04854  -LISTC    ENDED.  NAME-                     TOTAL TCB CPU TIME=      .00 TOTAL ELAPSED TIME=    .0 SUBSYS=JES2
 16.16.29 JOB04854  $HASP395 LISTC    ENDED
0------ JES2 JOB STATISTICS ------
-  20 SEP 2016 JOB EXECUTION DATE
-            8 CARDS READ
-        1,832 SYSOUT PRINT RECORDS
-            0 SYSOUT PUNCH RECORDS
-           68 SYSOUT SPOOL KBYTES
-         0.00 MINUTES EXECUTION TIME
         1 //LISTC    JOB   MSGCLASS=X,CLASS=A,NOTIFY=&SYSUID                      JOB04854
           //*-----------------------------------------------------                00013038
           //*                                                                     00014038
           IEFC653I SUBSTITUTION JCL - MSGCLASS=X,CLASS=A,NOTIFY=CICS004
         2 //GO       EXEC PGM=IDCAMS,REGION=0M                                    00018038
         3 //SYSPRINT DD SYSOUT=*                                                  00019038
         4 //SYSIN DD *                                                            00020038
 ICH70001I CICS004  LAST ACCESS AT 15:59:00 ON TUESDAY, SEPTEMBER 20, 2016
 IEF236I ALLOC. FOR LISTC GO
 IEF237I JES2 ALLOCATED TO SYSPRINT
 IEF237I JES2 ALLOCATED TO SYSIN
 IEF142I LISTC GO - STEP WAS EXECUTED - COND CODE 0000
 IEF285I   CICS004.LISTC.JOB04854.D0000102.?            SYSOUT
 IEF285I   CICS004.LISTC.JOB04854.D0000101.?            SYSIN
 IEF373I STEP/GO      /START 2016264.1616
 IEF032I STEP/GO      /STOP  2016264.1616
         CPU:     0 HR  00 MIN  00.01 SEC    SRB:     0 HR  00 MIN  00.00 SEC
         VIRT:   480K  SYS:   260K  EXT:      648K  SYS:    11520K
         ATB- REAL:                     8K  SLOTS:                     0K
              VIRT- ALLOC:       1M SHRD:       0M
 IEF375I  JOB/LISTC   /START 2016264.1616
 IEF033I  JOB/LISTC   /STOP  2016264.1616
         CPU:     0 HR  00 MIN  00.01 SEC    SRB:     0 HR  00 MIN  00.00 SEC
1IDCAMS  SYSTEM SERVICES                                           TIME: 16:16:29        09/20/16     PAGE      1
0
  LISTC USERCATALOG ALL                                                  00021038
1IDCAMS  SYSTEM SERVICES                                           TIME: 16:16:29        09/20/16     PAGE      2
-                             LISTING FROM CATALOG -- CATALOG.Z21.MASTER
0USERCATALOG --- CATALOG.DB2018
      HISTORY
        RELEASE----------------2
      VOLUMES
        VOLSER------------DB2P08     DEVTYPE------X'3010200F'     VOLFLAG------------PRIME
      ASSOCIATIONS
        ALIAS----KAWAGUTI
0USERCATALOG --- CATALOG.IMSTOOLS
      HISTORY
        RELEASE----------------2
      VOLUMES
        VOLSER------------DB2P15     DEVTYPE------X'3010200F'     VOLFLAG------------PRIME
      ASSOCIATIONS
        ALIAS----EKY310
        ALIAS----FPBS12
        ALIAS----IMSPI21
        ALIAS----HDCG11
        ALIAS----HPCA11
        ALIAS----HPCA110C
        ALIAS----HWS120
        ALIAS----QCF12
        ALIAS----HWS210
        ALIAS----IMSPA32
        ALIAS----IMSPA31
        ALIAS----HPCA12
        ALIAS----IMSPM11
        ALIAS----DRCF21
        ALIAS----IICF82B
        ALIAS----HPCASPLC
        ALIAS----HPCASPLF
        ALIAS----IMSPA33
        ALIAS----HWSX11
        ALIAS----IMSPI12
        ALIAS----HWS22
        ALIAS----HPFP21
        ALIAS----HPIC32
        ALIAS----HPLO21
        ALIAS----IBPA11
        ALIAS----QCF21
        ALIAS----DENC11
        ALIAS----HPIC41
        ALIAS----HPPC21
        ALIAS----HPFP22
(以下略)
```
##JOBLOGのうち特定のDD部分を参照する

JOBLOGのうち特定のDD部分を参照するためのREXXです。

[joblog_dd.rexソース](https://github.com/tomotagwork/Q01/blob/master/USS_REXX/joblog_dd.rex)

出来る事:
>指定したJOBID、DD名に該当するJOBLOGを標準出力に表示します。

使い方: 
>$ joblog_dd.rex \<JOBID\> \<DD名\>

例: 
>$ joblog_dd.rex JOB04854

先のJOBLOGのうちJESMSGLG部分を参照する例

```xxx:実行例
[CICS004@EPLEX1:/u/cics004/REXX] joblog_dd.rex JOB04854 JESMSGLG
1                      J E S 2  J O B  L O G  --  S Y S T E M  Z O S 1  --  N O D E  E P L E X
0
 16.16.29 JOB04854 ---- TUESDAY,   20 SEP 2016 ----
 16.16.29 JOB04854  IRR010I  USERID CICS004  IS ASSIGNED TO THIS JOB.
 16.16.29 JOB04854  ICH70001I CICS004  LAST ACCESS AT 15:59:00 ON TUESDAY, SEPTEMBER 20, 2016
 16.16.29 JOB04854  $HASP373 LISTC    STARTED - INIT 1    - CLASS A        - SYS ZOS1
 16.16.29 JOB04854  IEF403I LISTC - STARTED - TIME=16.16.29
 16.16.29 JOB04854  -                                      -----TIMINGS (MINS.)------                          -----PAGING COUNTS----
 16.16.29 JOB04854  -STEPNAME PROCSTEP    RC   EXCP   CONN       TCB       SRB  CLOCK          SERV  WORKLOAD  PAGE  SWAP   VIO SWAPS
 16.16.29 JOB04854  -GO                   00     78     15       .00       .00     .0           775  BATCHWL      0     0     0     0
 16.16.29 JOB04854  IEF404I LISTC - ENDED - TIME=16.16.29
 16.16.29 JOB04854  -LISTC    ENDED.  NAME-                     TOTAL TCB CPU TIME=      .00 TOTAL ELAPSED TIME=    .0 SUBSYS=JES2
 16.16.29 JOB04854  $HASP395 LISTC    ENDED
0------ JES2 JOB STATISTICS ------
-  20 SEP 2016 JOB EXECUTION DATE
-            8 CARDS READ
-        1,832 SYSOUT PRINT RECORDS
-            0 SYSOUT PUNCH RECORDS
-           68 SYSOUT SPOOL KBYTES
-         0.00 MINUTES EXECUTION TIME
```                 

##JOB名からJOBIDのリストを取得 (JOBIDリストのみ)

指定したJOB名に合致するJOBのJOBIDのリストを表示するREXXです。
SDSF - ST の画面でPRE xxx* で表示されるJOBからJOBIDを抜き出すイメージです。
[jobidlist.rexソース](https://github.com/tomotagwork/Q01/blob/master/USS_REXX/jobidlist.rex)

※シェル・スクリプトから再利用しやすいように敢えてJOBIDのみをリストするようにしています。

出来る事:
>指定したJOB名に該当するJOBIDを標準出力に表示します。

使い方: 
>$ jobidlist.rex \<JOB名のプレフィックス\>

例: 
>$ jobidlist.rex LIS

LISで始まるJOB名のJOBIDをリストする例
(ST画面でPRE LIS*を実行した時に得られるJOB)

```xxx:実行例
[CICS004@EPLEX1:/u/cics004/REXX] ./jobidlist.rex LIS
JOB04854
JOB04861
```

##JOB名からJOBIDのリストを取得 (詳細情報付き)

先の例と同様、指定したJOB名に合致するJOBのJOBIDのリストを表示するREXXです。
SDSF - ST の画面でPRE xxx* で表示されるJOBからJOBIDを抜き出すイメージです。
[jobidlist_detail.rexソース](https://github.com/tomotagwork/Q01/blob/master/USS_REXX/jobidlist_detail.rex)

※見た目に分かりやすいよう、JOBIDだけでなく他の情報も付随して表示させています(ST画面に近い形で出力)

出来る事:
>指定したJOB名に該当するJOBIDを標準出力に表示します。

使い方: 
>$ jobidlist_detail.rex \<JOB名のプレフィックス\>

例: 
>$ jobidlist_detail.rex LIS

LISで始まるJOB名のJOBIDをリストする例
(ST画面でPRE LIS*を実行した時に得られるJOB)

```xxx:実行例
[CICS004@EPLEX1:/u/cics004/REXX] ./jobidlist_detail.rex LIS
LISTC JOB04854 CICS004 1 PRINT CC 0000
LISTC JOB04861 CICS004 1 PRINT CC 0000
```

##JOBLOGをDD単位でファイルに落とす(1)
指定したJOBIDに該当するJOBのJOBLOGを、DD別にファイルに出力するREXXです。

[jobdd.rexソース](https://github.com/tomotagwork/Q01/blob/master/USS_REXX/jobdd.rex)

出来る事:
>指定したJOBIDに該当するJOBLOGをDD単位でカレント・ディレクトリに出力します。ファイル名は\<JOBID\>_\<DD名\>.txtです。

使い方: 
>$ jobdd.rex \<JOBID\>

例: 
>$ jobdd.rex JOB04854

JOBID: JOB04854 のJOBLOGをDD単位でファイルに出力する例

```xxx:実行例
[CICS004@EPLEX1:/u/cics004/REXX] jobdd.rex JOB04854
Create file: JOB04854_JESMSGLG.txt
Create file: JOB04854_JESJCL.txt
Create file: JOB04854_JESYSMSG.txt
Create file: JOB04854_SYSPRINT.txt

[CICS004@EPLEX1:/u/cics004/REXX] ls -la | grep JOB04854
-rw-rw-rw-   1 AZUMA    STC          625 Sep 20 09:25 JOB04854_JESJCL.txt
-rw-rw-rw-   1 AZUMA    STC         1346 Sep 20 09:25 JOB04854_JESMSGLG.txt
-rw-rw-rw-   1 AZUMA    STC          896 Sep 20 09:25 JOB04854_JESYSMSG.txt
-rw-rw-rw-   1 AZUMA    STC        61323 Sep 20 09:25 JOB04854_SYSPRINT.txt
```

##JOBLOGをDD単位でファイルに落とす(2)
上の例ではJOBIDを指定する必要があるので、JOBIDを調べる必要があるので状況によっては少し面倒です。
JOB名を指定して、そのJOB名に該当するJOBIDのうち一番数字が大きいもの(≒最新のもの)を判断してJOBLOGをDD単位で取得するシェル・スクリプトを作ってみました。
内部的には先に紹介したjobidlist.rex, jobdd.rexを使用しています。

[getJobDDs.shソース](https://github.com/tomotagwork/Q01/blob/master/USS_Shell/getJobDDs.sh)

出来る事:
>指定したJOB名に該当するJOBLOGのうち、JOBIDが一番大きいものをDD単位でカレント・ディレクトリに出力します。ファイル名は\<JOBID\>_\<DD名\>.txtです。
>(STの画面でPRE xxx*でリストされるJOBLOGから選択されるイメージです)

使い方: 
>$ getJobDDs.sh \<JOB名\>

例: 
>$ getJobDDs.sh LIST

JOB名: LIST* のJOBLOGのうち一番JOBIDが大きいものをDD単位でファイルに出力する例

```xxx:実行例
[CICS004@EPLEX1:/u/cics004/Shell] getJobDDs.sh LIST
Create file: JOB04861_JESMSGLG.txt
Create file: JOB04861_JESJCL.txt
Create file: JOB04861_JESYSMSG.txt
Create file: JOB04861_SYSPRINT.txt
```

#USSからJCLをサブミットする

USSからJCLをサブミットし、JOBLOGを標準出力に返すシェル・スクリプトです。
内部的には先に紹介したjoblog.rexを使用しています。
JCLの完了を拾うスマートな方法が分からなかったので、短絡的にSleep入れてJOBLOG取得をするようにしています。

[jcl_sub.shソース](https://github.com/tomotagwork/Q01/blob/master/USS_Shell/jcl_sub.sh)

出来る事:
>指定したJCLをサブミットします。合わせてSleepTimeを指定できるので、その時間待ってJOBLOGを標準出力に出力します。待ち時間は省略可(デフォルト5秒)。

使い方: 
>$ jcl_sub.sh \<JCL名\> [\<Sleep Time\>]

例: 
>$ jcl_sub.sh 'CICSSHR.CICS004.JCLLIB(LISTC)' 10

LISTCATを行うJCL(CICSSHR.CICS004.JCLLIB(LISTC)というPDSメンバー)をサブミットする例

```xxx:実行例
[CICS004@EPLEX1:/u/cics004/Shell] ./jcl_sub.sh 'CICSSHR.CICS004.JCLLIB(LISTC)' 10
JobID: JOB04888
sleep  10
isfmsg2.1 is: ISF767I Request completed.
LISTC JOB04888 CICS004
1                      J E S 2  J O B  L O G  --  S Y S T E M  Z O S 1  --  N O D E  E P L E X
0
 18.49.56 JOB04888 ---- TUESDAY,   20 SEP 2016 ----
 18.49.56 JOB04888  IRR010I  USERID CICS004  IS ASSIGNED TO THIS JOB.
 18.49.56 JOB04888  ICH70001I CICS004  LAST ACCESS AT 18:46:36 ON TUESDAY, SEPTEMBER 20, 2016
 18.49.56 JOB04888  $HASP373 LISTC    STARTED - INIT 1    - CLASS A        - SYS ZOS1
 18.49.56 JOB04888  IEF403I LISTC - STARTED - TIME=18.49.56
 18.49.56 JOB04888  -                                      -----TIMINGS (MINS.)------                          -----PAGING COUNTS----
 18.49.56 JOB04888  -STEPNAME PROCSTEP    RC   EXCP   CONN       TCB       SRB  CLOCK          SERV  WORKLOAD  PAGE  SWAP   VIO SWAPS
 18.49.56 JOB04888  -GO                   00     77     15       .00       .00     .0           777  BATCHWL      0     0     0     0
 18.49.56 JOB04888  IEF404I LISTC - ENDED - TIME=18.49.56
 18.49.56 JOB04888  -LISTC    ENDED.  NAME-                     TOTAL TCB CPU TIME=      .00 TOTAL ELAPSED TIME=    .0 SUBSYS=JES2
 18.49.56 JOB04888  $HASP395 LISTC    ENDED
0------ JES2 JOB STATISTICS ------
-  20 SEP 2016 JOB EXECUTION DATE
-            8 CARDS READ
-        1,832 SYSOUT PRINT RECORDS
-            0 SYSOUT PUNCH RECORDS
-           68 SYSOUT SPOOL KBYTES
-         0.00 MINUTES EXECUTION TIME
         1 //LISTC    JOB   MSGCLASS=X,CLASS=A,NOTIFY=&SYSUID                      JOB04888
           //*-----------------------------------------------------                00013038
           //*                                                                     00014038
           IEFC653I SUBSTITUTION JCL - MSGCLASS=X,CLASS=A,NOTIFY=CICS004
         2 //GO       EXEC PGM=IDCAMS,REGION=0M                                    00018038
         3 //SYSPRINT DD SYSOUT=*                                                  00019038
         4 //SYSIN DD *                                                            00020038
 ICH70001I CICS004  LAST ACCESS AT 18:46:36 ON TUESDAY, SEPTEMBER 20, 2016
 IEF236I ALLOC. FOR LISTC GO
 IEF237I JES2 ALLOCATED TO SYSPRINT
 IEF237I JES2 ALLOCATED TO SYSIN
 IEF142I LISTC GO - STEP WAS EXECUTED - COND CODE 0000
 IEF285I   CICS004.LISTC.JOB04888.D0000102.?            SYSOUT
 IEF285I   CICS004.LISTC.JOB04888.D0000101.?            SYSIN
 IEF373I STEP/GO      /START 2016264.1849
 IEF032I STEP/GO      /STOP  2016264.1849
         CPU:     0 HR  00 MIN  00.01 SEC    SRB:     0 HR  00 MIN  00.00 SEC
         VIRT:   480K  SYS:   260K  EXT:      648K  SYS:    11520K
         ATB- REAL:                     8K  SLOTS:                     0K
              VIRT- ALLOC:       1M SHRD:       0M
 IEF375I  JOB/LISTC   /START 2016264.1849
 IEF033I  JOB/LISTC   /STOP  2016264.1849
         CPU:     0 HR  00 MIN  00.01 SEC    SRB:     0 HR  00 MIN  00.00 SEC
1IDCAMS  SYSTEM SERVICES                                           TIME: 18:49:56        09/20/16     PAGE      1
0
  LISTC USERCATALOG ALL                                                  00021038
1IDCAMS  SYSTEM SERVICES                                           TIME: 18:49:56        09/20/16     PAGE      2
-                             LISTING FROM CATALOG -- CATALOG.Z21.MASTER
0USERCATALOG --- CATALOG.DB2018
      HISTORY
        RELEASE----------------2
      VOLUMES
        VOLSER------------DB2P08     DEVTYPE------X'3010200F'     VOLFLAG------------PRIME
      ASSOCIATIONS
        ALIAS----KAWAGUTI
0USERCATALOG --- CATALOG.IMSTOOLS
      HISTORY
        RELEASE----------------2
      VOLUMES
        VOLSER------------DB2P15     DEVTYPE------X'3010200F'     VOLFLAG------------PRIME
      ASSOCIATIONS
        ALIAS----EKY310
        ALIAS----FPBS12
        ALIAS----IMSPI21
        ALIAS----HDCG11
        ALIAS----HPCA11
        ALIAS----HPCA110C
(以下略)
```

#おわりに
PCOMよりteratermの方が断然操作性がよいので、この辺の仕組みを充実させるとかなり使い勝手がよくなると思います。特にJOBLOGの取得なんて結構便利じゃないでしょうか？ PCOMだと一つ一つXDCの画面からデータセットに移して...みたいなことをすると思うんですけど。
(そのうちWindowsにダイレクトにJOBLOG落とす方法についても書く予定。）
問題はお客様環境だと権限の問題なんかがあったりしてなかなかここまで自由にできないんですよね...。
こういうインターフェースが主流になる日は来るのだろうか？？？

-----

ここで紹介した内容の応用編です。
[Windows/Linux/UnixからSSH経由でz/OSを操作する](http://qiita.com/tomotagwork/items/8ae6ea490ba871f1dee8)

#参考
[z/OS 2.2.0 - SDSF - z/OS SDSF Operation and Customization - Using SDSF with the REXX programming language](http://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.isfa500/rexx.htm)
[z/OS 2.2.0 - SDSF - z/OS SDSF Operation and Customization - Columns on the SDSF panels - Status panel (ST)](http://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.isfa500/isfjvstd.htm)
[z/OS UNIX tools](http://www-03.ibm.com/systems/z/os/zos/features/unix/bpxa1ty2.html)