我会尽可能地描述我的问题。
我事先知道,可以在第一行末尾使用反斜杠键入一个z/OSshell UNIX命令,而该命令不适合一行。事实上,我已经在我使用的计算机上测试过了,运行良好。
例如;为了做一个测试,我输入ls命令如下:
首先,在命令行中不使用反斜杠:
ls -la
也可以从命令行使用反斜杠:
ls\
-la
我得到同样好的结果
我想知道的是如何在使用BPXBATCH执行的STDIN中的z/OSUNIXshell脚本中执行相同的操作。
如果我把命令如下ls-la它执行良好;但是如果我试着把它分成两行,它就不起作用了。
有没有人能在这个问题上有所启发?.
许多thaks提前
(显然ls -la
是一个非常简单的例子,只是为了展示我所面临的问题;真实的命令要大得多)
4条答案
按热度按时间jjjwad0x1#
我来试试。使用BPXBATCH,您希望发出shell命令。下面是一个简单的例子:
这样做的效果是将shell命令
ls -l
的输出写入stdout。但是-如果它是一个更长的字符串?有两条路可以走。一种方法是编写一个 Package 器脚本,并从BPXBATCH调用它(我就是这么做的)。另一种是将PARM放在多行中,在这种情况下,您需要遵循JCL规则进行延续(在第72列中使用+),例如。与JCL的间距是真正恼人的-所以你必须得到它的权利。该+号必须在第72列中,否则将出现JCL错误。下一行文本从第16列开始。开始得晚,你最终会得到空白(在这种情况下会有所不同)。
wribegjk2#
要将长命令传递给BPXBATCH,请使用STDPARM DD。
虽然可以使用JCL连续规则通过JCL EXEC语句上的PARM参数将 * 相对 * 长的命令传递给BPXBATCH,但此方法仍限于100字节。
通过STDPARM传递到BPXBATCH的参数文件支持长度最大为64 K的参数(即命令)。参数文件可以是z/OS-Unix文件、传统的z/OS数据集或JCL中的流内文件。
例如,放置一个长命令(此示例命令为105字节):
在
/u/userid/stdparmfile
上的z/OS-Unix文件中然后使用STDPARM通过BPXBATCH执行命令(PATHOPTS必须设置为ORDONLY):
或者将相同的命令放入传统的z/OS数据集(具有足够的LRECL)。确保在ISPF EDIT中通过发出
UNNUM
和/或NUMBER OFF
从数据集中删除序列号。然后同样通过JCL提交:STDPARM DD上的流内提交的限制性更强一些,因为在每个行尾都假定有一个空格字符。如果流内命令可以在空格字符边界上拆分,以符合JCL的80字节限制,那么它应该是很好的。我们在这里使用的示例命令将像这样工作:
但是,包括>80字节的不间断文本字符串的命令可能会对流内提出挑战。
可以在此处找到STDPARM的z/OS 2.3文档:https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.bpxa400/batstdparm.htm
tquggr8v3#
在BPXBATCH中,您实际上希望使用'+'作为STDIN的延续字符。BPXBATCH是一个TSO命令处理器,因此它使用TSO延续字符,而不是USS'
mefy6pfw4#
有点晚了,但PBXBATCH只是将多行连接成一行。在您的情况下,它可能看起来像:
就像一个有多个命令的例子一样,通常这是多个命令(注意分号):
请参阅此链接以供参考:https://bit.listserv.ibm-main.narkive.com/LphTazF4/multi-line-stdparm-shell-script-for-bpxbatch