【问题标题】:How to store a result to a variable in HP OpenVMS DCL?如何将结果存储到 HP OpenVMS DCL 中的变量中?
【发布时间】:2016-01-20 02:47:58
【问题描述】:

我想将程序的输出保存到变量中。

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

$ 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?

【问题讨论】:

  • 我猜该程序的输出不仅仅是一个单一的标记,即类似于“Hello world.”的东西。您需要引用该值以使其成为逻辑名称。不确定确切的语法,但可能是 DEFINE/JOB VALUE "''@SYS$PIPE'" 的一些变化。
  • "''@SYS$PIPE'" 将不起作用:单引号仅用于 DCL 符号。 SYS$PIPE 是逻辑,@ 是输入重定向。

标签: openvms dcl


【解决方案1】:

执行此操作的通常方法是将输出写入文件并从文件中读取并将其放入 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)
$

【讨论】:

    【解决方案2】:

    如果您能够更改程序,请添加一些代码以将所需的值写入符号或逻辑(请参阅 LIB$ 例程)

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        • 2013-10-03
        • 1970-01-01
        • 2019-12-29
        • 1970-01-01
        • 2015-06-11
        相关资源
        最近更新 更多