如何将程序的输出分配给VMS上的DCL com脚本中的变量?

时间:2010-12-13 17:44:26

标签: vms dcl

例如,我有一个perl脚本p.pl,它将“5”写入stdout。我想将输出分配给变量,如下所示:

$ x = perl p.pl ! not working code
$ ! now x would be 5

3 个答案:

答案 0 :(得分:3)

PIPE命令允许你进行Unix-ish流水线操作,但DCL不是bash。获取分配给符号的输出很棘手。每个PIPE段都在一个单独的子进程(如Unix)中运行,并且无法从子进程返回符号。 AFAIK,没有bash相当于将stdout赋值给变量。

典型的方法是将输出写入(重定向)到文件,然后将其读回:

 $ PIPE perl p.pl > temp.txt 
 $ open t temp.txt
 $ read t x
 $ close t

另一种方法是将返回值指定为由所有子进程共享的JOB逻辑。这可以使用PIPE作为单行完成:

 $ PIPE perl p.pl | DEFINE/JOB RET_VALUE @SYS$PIPE
 $ x = f$logical("RET_VALUE")

由于“RET_VALUE”由作业中的所有进程共享,因此必须注意副作用。

答案 1 :(得分:0)

查找PIPE命令。它可以让你像unix一样进行unix。

答案 2 :(得分:0)

我想从文件的ACL中标识一个特定的ACE,然后将该值分配给一个我稍后在脚本中引用的变量。我想避免写入文件或从文件读取的开销,因为我要迭代1000个文件。这种方法对我有用。

$ PIPE DIR / SEC文件名| SEARCH SYS $ PIPE变量| (读取SYS $ PIPE变量&& DEFINE / JOB / NOLOG变量&variable)

$ SHOW LOGICAL变量