例如,我有一个将“5”写入标准输出的 perl 脚本 p.pl。我想将该输出分配给如下变量:
$ x = perl p.pl ! not working code
$ ! now x would be 5
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”,因此您必须小心副作用。
查找 PIPE 命令。它可以让你做类似 Unix 的事情。
我想从文件的 ACL 中识别特定的 ACE,然后将值分配给我稍后可以在脚本中引用的变量。我想避免写入/读取文件的开销,因为我有 1000 个文件要迭代。这种方法对我有用。
$ PIPE DIR/SEC 文件名 | 搜索 SYS$PIPE 变量 | (READ SYS$PIPE 变量 && DEFINE/JOB/NOLOG 变量 &variable)
$ 显示逻辑变量