2016-01-20 85 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符號(您正在調用變量)。這是最簡單的方法。如果它確實需要是邏輯的,那麼就有定義邏輯的系統調用。

相關問題