2016-01-20 63 views
1

我想将程序的输出保存到变量中。如何将结果存储到HP OpenVMS DCL中的变量中?

我使用以下方法,但失败。

$ PIPE RUN TEST | DEFINE/JOB VALUE @SYS$PIPE $ x = f$logical("VALUE")

我得到了一个错误:%DCL-W-MAXPARM, too many parameters - reenter command with fewer parameters \WORLD\

参考: How to assign the output of a program to a variable in a DCL com script on VMS?

+0

我猜测程序的输出不止是一个单一的标记,即像“Hello world”。您需要引用该值以将其变为逻辑名称。不确定的确切语法,但可能在'DEFINE/JOB VALUE''''@ SYS $ PIPE'“'上有一些变化。 – HABO

+1

'“''@ SYS $ PIPE'”'不起作用:单引号仅用于DCL符号。 'SYS $ PIPE'是一个逻辑,'@'是输入重定向。 – user2116290

回答

5

通常的方式做到这一点是将输出写入文件,从文件中读取,并把将其转换为DCL符号(或逻辑)。虽然不是很明显,你可以做到这一点与PIPE命令的一致好评:

$ pipe r 2words 
hello world 
$ pipe r 2words |(read sys$pipe line ; line=""""+line+"""" ; def/job value &line) 
$ sh log value 
    "VALUE" = "hello world" (LNM$JOB_85AB4440) 
$ 
1

,如果你能更改程序,添加一些代码,将其添加到所需的值写入符号或逻辑值(见LIB $例程)

0

如果您可以修改程序,则在程序中使用LIB $ SET_SYMBOL会为DCL定义一个DCL符号(您正在调用变量)。这是最简单的方法。如果它确实需要是逻辑的,那么就有定义逻辑的系统调用。

相关问题