我一直在尝试从JCL中运行OGET命令。通常我会使用 ISPF 的 ishell 命令行;6,然后从那里运行命令,但是,这项工作太大了,我需要自动执行任务。
到目前为止,我尝试的是使用 IKJEF01、IKJEFT01 和 OSHELL 命令以及 BPXBATCH 来发送命令,但没有一个有效。
我希望使用的命令如下:
OGET '/CPU/TMP/文件名。IND"图书馆。指数。呃'二进制转换(否(
我对IKJEFT01和OSHELL的尝试:
//TMP1 EXEC PGM=IKJEFT01,
// DYNAMNBR=200
//SYSPROC DD DSN=SYS1.SBPXEXEC,DISP=SHR
//*
//SYSTSPRT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//*
//SYSTSIN DD *
OSHELL OGET '/CPU/TMP/filename.IND' 'library.INDEX.EHH' -
BINARY CONVERT(NO)
//*
我尝试使用 BPXBATCH:
//SHELLCMD EXEC PGM=BPXBATCH
//STDERR DD SYSOUT=*
//STDOUT DD SYSOUT=*
//STDPARM DD *
SH OGET '/CPU2/TMP/filename.IND' 'library.INDEX.EHH' BINARY CONVERT(NO)
/*
这两种方法都会产生相同的错误:
FSUM1006 A shell was not specified. Processing continues using the default shell name.
FSUM7332 syntax error: got (, expecting Newline
如果我删除转换(否(,我会收到以下错误:
FSUM1006 A shell was not specified. Processing continues using the default shell name.
OGET: FSUM7351 not found
有人可以帮忙吗?
我没有找到解决最初问题的方法,但我编写了一个 REXX 脚本来完成这项工作:
/* REXX demo */
ADDRESS TSO
"OGET '/CPU2/tmp/filename.ind' 'library.INDEX.EHH' BINARY
CONVERT(NO)"
这是使用以下代码从我的 CNTL 调用的:
//STEPREXX EXEC PGM=IKJEFT01,PARM='REXX-name'
//SYSEXEC DD DSN=PDS,DISP=SHR
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD DUMMY
我过去有类似的任务,最终得到了以下解决方案:
//COPYSTEP EXEC PGM=IKJEFT01
// SET SRC='/CPU2/tmp/filename.ind'
// SET Q=''''
//IN DD PATH=&Q.&SRC.&Q,PATHOPTS=(ORDONLY)
//OUT DD DSN=LIBRARY.INDEX.EHH,DISP=(,CATLG),
// SPACE=(TRK,(10,10),RLSE),RECFM=FB,LRECL=4000,BLKSIZE=0
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
OCOPY INDD(IN) OUTDD(OUT) BINARY CONVERT(NO) PATHOPTS(USE)
/*
另一种选择是在USS中创建shell脚本,并从JCL执行它。
//SHRUN EXEC PGM=BPXBATCH,PARM='SH'
//STDIN DD PATH='/path/to/script/script.name',
// PATHOPTS=(OCREAT,ORDONLY),
// PATHMODE=(SIRWXU,SIROTH),
// PATHDISP=(KEEP,KEEP)
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//STDENV DD *
脚本本身非常简单
cp -W "seqparms='RECFM=FB,LRECL=4000'" /CPU2/tmp/filename.ind "//'LIBRARY.INDEX.EHH'"
OGET 是一个 TSO 命令,可通过 IKJEFT01 直接访问。没有必要调用OSHELL或BPXBATCH(顺便说一句...OSHELL 只是一个调用 BPXBATCH 的 REXX(。
只需在原始 JCL 中直接使用 OGET(不带 OSHELL 命令(,它就可以工作:
//TMP1 EXEC PGM=IKJEFT01,
// DYNAMNBR=200
//SYSPROC DD DSN=SYS1.SBPXEXEC,DISP=SHR
//SYSTSPRT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSTSIN DD *
OGET '/CPU/TMP/filename.IND' 'library.INDEX.EHH' -
BINARY CONVERT(NO)
//*