Как назначить вывод программы в переменную в скрипте DCL на VMS?

StackOverflow https://stackoverflow.com/questions/4431757

  •  09-10-2019
  •  | 
  •  

Вопрос

Например, у меня есть сценарий Perl P.PL, который пишет «5» на stdout. Я хотел бы назначить этот вывод в переменной, как:

$ x = perl p.pl ! not working code
$ ! now x would be 5
Это было полезно?

Решение

Команда PAPE позволяет сделать трубопровод UNIX-ISH, но DCL не Bash. Получение выхода, назначенного на символ, сложно. Каждый сегмент трубы проходит в отдельном подпроцессе (например, UNIX), и нет возможности вернуть символ с подпроцесса. AFAIK, нет, эквивалентно для назначения 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» передается всем процессам на работе, вы должны быть осторожны с побочными эффектами.

Другие советы

Посмотрите на команду трубы. Это позволяет вам делать Unix, как вещи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top