我一直在尝试从JCL中运行OGET-命令。通常,我会使用ISPF;6的ishell命令行,然后从那里运行命令,但是,这个作业太大了,我需要自动执行该任务。
到目前为止,我已经尝试使用IKJEF01、IKJEFT01和OSHELL-命令,以及BPXBATCH来发送命令,但都没有成功。
我希望使用的命令如下:
OGET '/CPU/TMP/filename.IND‘'library.INDEX.EHH’二进制转换(NO)
我尝试使用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
如果我删除CONVERT(NO),我会得到以下错误:
FSUM1006 A shell was not specified. Processing continues using the default shell name.
OGET: FSUM7351 not found
有人能帮上忙吗?
发布于 2019-12-17 17:56:08
我没有找到一种方法来解决我最初的问题,但我写了一个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
发布于 2019-12-18 07:04:32
我在过去也有过类似的任务,我最终得到了以下解决方案:
//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'"
发布于 2019-12-18 08:52:33
OGET是一个TSO命令,可以通过IKJEFT01直接访问。不需要调用OSHELL或BPXBATCH (BTW...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)
//*
https://stackoverflow.com/questions/59375321
复制相似问题