たとえば、stdoutに「5」を書き込むperlスクリプトp.plがあります。その出力を次のような変数に割り当てたいと思います。
$ x = perl p.pl ! not working code
$ ! now x would be 5
PIPEコマンドを使用すると、Unix風のパイプライン処理を実行できますが、DCLはbashではありません。シンボルに割り当てられた出力を取得するのは難しいです。各PIPEセグメントは個別のサブプロセス(Unixなど)で実行され、サブプロセスからシンボルを返す方法はありません。AFAIK、変数にstdoutを割り当てることに相当するbashはありません。
一般的なアプローチは、出力をファイルに書き込み(リダイレクト)してから、それを読み戻すことです。
$ 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を識別し、スクリプトの後半で参照できる変数に値を割り当てたいと思いました。何千ものファイルを反復処理する必要があるため、ファイルへの書き込み/ファイルの読み取りのオーバーヘッドを回避したかったのです。この方法は私のために働いた。
$ PIPE DIR/SECファイル名| SYS$PIPE変数を検索| (SYS$PIPE変数&&DEFINE/ JOB / NOLOG変数&variableを読み取ります)
$SHOWLOGICAL変数