Как назначить вывод программы в переменную в скрипте DCL на VMS?
Вопрос
Например, у меня есть сценарий 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, как вещи.