将qshell(qsh)命令的输出写入本地数据区

问题描述:

我想将qshell命令的输出写入本地数据区,以便它可以由程序全局使用。有一些方法可以从stdout文件写入本地数据区。我希望它通过CL..its进行紧急感谢将qshell(qsh)命令的输出写入本地数据区

+0

这个问题需要澄清。输出到数据区域将由CL或Qshell实用程序完成。如果您希望Qshell实用程序的输出转到数据区域,它将通过Qshell完成,而不是“通过CL完成”。 CL可以调用Qshell实用程序,Qshell可以调用CL命令;但他们是两个非常不同的环境,并在不同的工作中运行。另外,如果数据区域是“本地数据区域”,则根据定义,它不能被“全局”访问。它必须是一个命名的数据区域(或数据队列或消息队列等)。如果我们知道为什么需要QSH,它会更容易回答。 – user2338816 2014-03-23 12:51:04

QSH CMD('system chgdtaara dtaara\(qgpl/dataarea\) value\($(echo test)\)') 
+0

非常感谢,但我不知道应该给数据区域什么名称..我的意思是我必须写* lda,因为我试图将值存储在本地数据区域或别的东西,因为当我运行这个错误信息显示命令未找到..请帮助我.. – 2010-05-12 08:52:59

+0

要将输出存储在* LDA中,只需将dtaara \(qgpl/dataarea \)参数更改为dtaara \(* LDA \)。 我不知道你为什么会收到命令找不到消息。你能发布确切的消息吗? – jamesallman 2010-05-12 14:29:54

我不认为你可以更新*从QSHELL LDA ......为命令穿过它,我想,是在一个单独的工作。

您可能想要考虑使用指定的数据队列......您可以使用qshell中的dataq命令。

这可能是最好的使用键控数据队列......但我不确定如何指定dataq命令上的键。

+0

可以使用命名的数据队列,特别是如果它是永久库中的* KEYED数据队列。 CL程序可以使用RTVJOBA检索完全限定的作业名称并将其放入作业级别的环境变量中。 * DTAQ密钥至少需要26个字节,如果需要唯一性时间戳,则密钥可能会更大。任何数量的工作都可以使用相同的* DTAQ。如果需要永久条目,* KEYED * USRIDX可能会更好;但是没有用于将条目添加到* USRIDX的本机QShell实用程序。 (很容易为* KEYED * DTAQ创建* CMD包装。) – user2338816 2014-03-30 04:18:15

使用iSeries dtarea结构为:

wc -l /tmp/mlco02.txt | datarea -w /qsys.lib/qgpl.lib/robtest.dtaara  

数据区qgpl/robtest先前创建

在这种情况下,我需要IFS文件的行(记录)数,所以中电可以得到它,分裂大文件下。

QSH CMD('A=`cat /tmp/mlco02.txt | wc -l`;exit $A') 
RCVMSG  MSGTYPE(*LAST) RMV(*NO) MSGDTA(&MSGDTA) + 
      MSGID(&MSGID)         
      IF (&MSGID *EQ 'QSH0005') DO     
       CHGVAR &EXITSTS %BIN(&MSGDTA 1 4)   
ENDDO 
+0

欢迎使用堆栈溢出!你能否简单地解释一下这段代码是如何工作的以及它如何解决手头的问题? – josliber 2015-09-26 03:57:37