问题描述
我从这个网址“借用”了 LPINFOX REXX 程序:[http://www.longpelaexpertise.com/toolsLPinfoX.PHP]
当我“直接”运行它时(EX 'hlq.EXEC(LPINFOX)')它运行良好:
------------------------------------------------------
LPInfo: information for z/OS ssssssss as of 18 Mar 2021
------------------------------------------------------
z/OS version: 02.04
Sysplex name: LOCAL
JES: JES2 z/OS 2.4 (Node nnnn)
Security Software: RACF
CEC: 3907-Z02 (IBM Z z14 ZR1)
CEC Serial: ssssss
CEC Capacity mmmm MSU
LPAR name: llll
LPAR Capacity mmm`enter code here` MSU
Not running under a z/VM image
但是,如果我将调用插入另一个 exec,我会从地址 LINKpgm 调用中得到一个 RC -2:
------------------------------------------------------
LPInfo: information for z/OS ssssssss as of 18 Mar 2021
------------------------------------------------------
z/OS version: 02.04
Sysplex name: LOCAL
JES: JES2 z/OS 2.4 (Node N1)
Security Software: RACF
79 - Address Linkpgm 'IWMQVS QVS_Out'
+++ RC(-2) +++
CEC: -
CEC Serial:
LPAR name:
Not running under a z/VM image
我确定这与运行的 REXX 程序的第二级有关,但是我该怎么办(除了排队第二个 REXX 的 EXecution 之外)?我也对这个 RC 的记录位置感到困惑……我在 Google 上搜索“REXX ADDRESS RC -2”的时间很短。
谢谢, 斯科特
PS(1),根据@phunsoft 的回答:
有趣。我没有将代码复制到我的另一个 REXX。我从另一个 rexx 中调用了 LPINFOX:我有一个 hlq.LOGIN.EXEC,其中包含一个“EX 'hlq.LPINFOX.EXEC”语句。当我将第一个 exec 减少到“TEST1”(如下)时,它以同样的方式失败:
/* REXX */
"EXECUTIL TS"
"EX 'FAGEN.LPINFOX.EXEC'"
exit 0
当我运行 TEST1 时,这是来自 IWMQVS 调用周围的 EXECUTIL 的输出:
当我直接从命令行运行 LPINFOX.EXEC 时,输出是一样的,除了地址 LINKpgm IWMQVS 工作正常:
我只能推测,当我运行“独立”exec 时与从另一个 exec 运行 exec 时存在一些环境差异。
PS(2),每个关于用 phunsoft 的 IEFBR14 替换 IWMQVS 的问题:
将程序更改为 IEFBR14 不会改变结果,RC=-2。
解决方法
LINKPGM
是 TSO/E REXX 主机命令环境,所以需要在 TSO/E REXX Reference 中搜索。从那本书:
此外,对于 LINKMVS、ATTCHMVS、LINKPGM 和 ATTCHPGM 环境中,RC 中设置的返回码可能是 -2,表示处理 的变量没有成功。变量处理可能已经 不成功,因为主机命令环境无法:
o 在链接或附加程序之前执行变量替换
o 程序完成后更新变量
不看代码很难说出问题是什么。
您可能希望使用 REXX 的跟踪功能进行调试。你从 TSO/E 前台运行这个 REXX 吗?如果是这样,您可以在启动 REXX 之前运行 TSO EXECUTIL TS
。然后它会像 trace ?i
被指定为代码的第一行一样运行。
我看过 LPINFOX EXEC 并看到变量 QVS_Out
在链接到 IWMQVS
之前设置如下:
QVS_Outlen = 500 /* Output area length */
QVS_Outlenx = Right(x2c(d2x(QVS_Outlen)),4,d2c(0))
/* Get length as fullword */
QVS_Out = QVS_Outlenx || Copies('00'X,QVS_Outlen-4)
当您将呼叫复制到另一个 REXX 时,您是否也这样做过?