Как назначить вывод программы переменной в сценарии DCL com в VMS? - PullRequest
1 голос
/ 13 декабря 2010

Например, у меня есть Perl-скрипт p.pl, который записывает «5» в стандартный вывод. Я хотел бы присвоить этот вывод переменной, например:

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

Ответы [ 2 ]

3 голосов
/ 14 декабря 2010

Команда PIPE позволяет вам выполнять конвейерную обработку Unix, но DCL не является bash. Получить вывод, назначенный символу, довольно сложно. Каждый сегмент PIPE выполняется в отдельном подпроцессе (например, Unix), и нет способа вернуть символ из подпроцесса. AFAIK, нет bash-эквивалента назначения stdout переменной.

Типичный подход - записать (перенаправить) вывод в файл и затем прочитать его обратно:

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

Другой подход заключается в назначении возвращаемого значения в качестве логического задания, которое совместно используется всеми подпроцессами. Это можно сделать как однострочник с использованием ТРУБЫ:

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

Поскольку «RET_VALUE» является общим для всех процессов в задании, вы должны быть осторожны с побочными эффектами.

0 голосов
/ 14 декабря 2010

Посмотрите на команду ТРУБА.Это позволяет вам делать Unix как вещи.

...