从 JCL 中使用 OGET 命令



我一直在尝试从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)                                        
//* 

相关内容

  • 没有找到相关文章

最新更新