プログラムの出力をVMSのDCL COMスクリプトの変数に割り当てる方法は?
質問
たとえば、「5」をstdoutに書き込むPerlスクリプトP.PLがあります。その出力を次のように変数に割り当てたいと思います。
$ x = perl p.pl ! not working code
$ ! now x would be 5
解決
パイプコマンドを使用すると、Unix-isのパイプライニングを行うことができますが、DCLはバッシュではありません。出力をシンボルに割り当てるのは難しいです。各パイプセグメントは別のサブプロセス(UNIXなど)で実行され、サブプロセスからシンボルを返す方法はありません。 AFAIK、STDOUTを変数に割り当てることに相当するバッシュはありません。
典型的なアプローチは、出力をファイルに書き込み(リダイレクト)してから読み戻すことです。
$ PIPE perl p.pl > temp.txt
$ open t temp.txt
$ read t x
$ close t
別のアプローチは、すべてのサブプロセスが共有するジョブの論理として返品値を割り当てることです。これは、パイプを使用して1ライナーとして実行できます。
$ PIPE perl p.pl | DEFINE/JOB RET_VALUE @SYS$PIPE
$ x = f$logical("RET_VALUE")
「ret_value」はジョブのすべてのプロセスで共有されているため、副作用に注意する必要があります。
他のヒント
パイプコマンドを検索します。それはあなたが物事のようなUnixをすることを可能にします。
所属していません StackOverflow