zos - 上一个 JCL 步骤未找到文件时运行步骤
问题描述
在以下 JCL 中,HFS 路径 /u/woodsmn/jjk 不存在。它会引发 JCL 错误并且不运行 COPYHFS 步骤,也不运行任何其他步骤。我希望它检测丢失的文件,并运行 FAILIND 步骤。
我怀疑 MVS 会引发 JCL 错误并完全忽略任何可能适用的 COND 条件。我希望它会引发一些失败步骤条件代码并以这种方式运行。
当 PATH 不存在时,如何重新编写它以执行步骤?
//WOODSMN1 JOB (1111),MSGLEVEL=(1,1),CLASS=A,MSGCLASS=H,
// USER=WOODSMN,REGION=1M
//COPYHFS EXEC PGM=IKJEFT01
//INHFS DD PATH='/u/woodsmn/jjk',
// PATHOPTS=(ORDONLY),RECFM=VB,LRECL=255,BLKSIZE=32760
//OUTMVS DD DSN=WOODSMN.TESTDS1,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(TRK,(1,1)),
// DCB=(LRECL=80,RECFM=FB,BLKSIZE=8080)
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
OCOPY INDD(INHFS) OUTDD(OUTMVS) CONVERT(NO)
/*
//*
//NETVIEW EXEC PGM=IEFBR14,COND=(0,EQ,COPYHFS)
//*
//SUCCIND EXEC PGM=IEBGENER,REGION=1M,COND=(0,EQ,NETVIEW)
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD *
Attempt to put file succeeded
/*
//SYSUT2 DD PATHOPTS=(ORDWR,OTRUNC,OCREAT),PATHMODE=SIRWXU,
// PATHDISP=(KEEP,DELETE),
// PATH='/u/woodsmn/TESTDS.SUCCESS'
//SYSIN DD DUMMY
//*
//FAILIND EXEC PGM=IEBGENER,REGION=1M,COND=(0,GT,NETVIEW)
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD *
Attempt to put file failed
/*
//SYSUT2 DD PATHOPTS=(ORDWR,OTRUNC,OCREAT),PATHMODE=SIRWXU,
// PATHDISP=(KEEP,DELETE),
// PATH='/u/woodsmn/TESTDS.FAIL'
//SYSIN DD DUMMY
//
解决方案
使用BPXBATCH执行 shell 命令来测试您的目录是否存在。
//EXIST001 EXEC PGM=BPXBATCH,PARM='SH test -e /u/woodsmn/jjk'
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
您可能需要变得更加奇特,并使用 STDPARM DD 传递一个 `set -o errexit' 以使返回代码完全按照您的意愿工作。
推荐阅读
- c# - C# WPF 更改帧源
- node.js - Puppeteer 等待框架被分离
- javascript - 如何从此图像中删除所有非文本/数字?
- node.js - Elastic Beanstalk 上的节点 JS 应用程序不允许上传大文件
- java - 如何使用 Rapid API 中的 LanguageTool API 检查 Java 中的字符串?
- c# - 将 Xamarin 应用注册页面连接到 MySQL 的 Azure 数据库
- mysql - 如果我有一个二级索引表和一个外键,是否为每个唯一外键创建索引?
- reactjs - 嗨,我正在尝试根据状态代码显示错误消息,但不幸的是在控制台中得到响应,而不是在客户端显示上
- flutter - 无法使用其官方 API 获取技术部分的 nytimes 数据
- javascript - 图表 JS 显示没有任何数据的空图表