如何将结果存储到HP OpenVMS DCL中的变量中?
问题描述:
我想将程序的输出保存到变量中。如何将结果存储到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?
答
通常的方式做到这一点是将输出写入文件,从文件中读取,并把将其转换为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)
$
答
,如果你能更改程序,添加一些代码,将其添加到所需的值写入符号或逻辑值(见LIB $例程)
答
如果您可以修改程序,则在程序中使用LIB $ SET_SYMBOL会为DCL定义一个DCL符号(您正在调用变量)。这是最简单的方法。如果它确实需要是逻辑的,那么就有定义逻辑的系统调用。
我猜测程序的输出不止是一个单一的标记,即像“Hello world”。您需要引用该值以将其变为逻辑名称。不确定的确切语法,但可能在'DEFINE/JOB VALUE''''@ SYS $ PIPE'“'上有一些变化。 – HABO
'“''@ SYS $ PIPE'”'不起作用:单引号仅用于DCL符号。 'SYS $ PIPE'是一个逻辑,'@'是输入重定向。 – user2116290