В OpenVMS, как я могу увидеть, откуда поступает команда - например, "который" в NIX

Если у меня есть команда dosomething в OpenVMS, где я могу увидеть, откуда она берется (Расположение скрипта /exe - как это определяется, если это другой вид животного)

3 ответа

Решение

$ ШОУ ПРОЦЕСС / ВСЕ

$ SHOW ENTRY

$ SHOW ENTRY / FULL

Существует три "источника" DCL, как вы говорите, "исходящих" от чего-то вроде команды.

Одно предупреждение: синтаксис с видимым явным применением DCL, например:

$'dosomething'

здесь не учитываются, только "видимые как команды".

Также явными командами RUN или MCR являются сами команды, затем run dosomething вне интереса.

Как проверить

  1. Символы

    Функция: как псевдоним un*x или как "запустить программу с параметрами", почти как MCR dosomething.

    Сделать:

    $ show symbol dosomething
    

    Символы "первого использования" (если используются, то имеют приоритет над следующими шагами)

  2. Истинная команда DCL

    Там нет встроенной утилиты для проверки таблицы команд.

    Однако вы можете установить бесплатную утилиту VERB.

    Затем сделайте:

    $ verb dosomething
    

    "Image" и "cliroutine" (в выводе VERB) показывают.EXE или внутреннюю подпрограмму DCL, где выполняется команда.

  3. Использование пути

    Сделать:

    $ directory DCL$PATCH:dosomething
    

    Если файл.COM или.EXE существует, командная процедура выполняется почти так же, как после @DCL$PATH:dosomething или изображение кода работает как mcr DCL$PATH:dosomething,

    Использование пути является "последним шансом" (только если символ не существует или не используется, и истинная команда DCL также не существует)

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

Некоторое дополнительное объяснение

  1. Если существует символ с именем, соответствующим вашей "команде", содержимое символа может быть переведено двумя способами:

    • если содержимое начинается с "$", использование называется "чужая команда" и запускает изображение (файл.EXE) остальной части содержимого вплоть до разделителя (параметр может применяться почти так же, как в псевдониме); предупреждение: каталогом по умолчанию для указанного.EXE является SYS$SYSTEM:, а не по умолчанию для процесса!

    • во всех остальных случаях значение может работать как псевдоним un*x.

    Значение символа "встроено" в командную строку, а замененный текст интерпретируется как ("новая") команда.

    Слово "может" применяется в отношении настройки SET SYMBOL (см. "HELP SET SYMBOL" для описания VERB).

    Имейте в виду, что псевдоним дополнительно объясняет другой действительный синтаксис dcl (истинная команда, явный "@" для процедуры или "невидимое" использование DCL$PATH), но не для следующего символа (псевдоним или чужая команда).

    Настоятельно не рекомендуется заменять любую настоящую команду DCL псевдонимами, НЕ делайте этого!

  2. Истинная команда задается с помощью команды SET COMMAND (очевидно), имена исполняемого файла (.EXE-образ или внутренняя подпрограмма DCL) никак не связаны с именем команды, даже если большинство команд имеют адекватные имена (команда DIRECTORY выполняет SYS$SYSTEM:DIRECTORY.EXE и т. Д., Но APPEND запускает COPY.EXE, а HELP - VMSHELP.EXE и т. Д.)

  3. Путь используется как в un*x, но:

    • Только после проверки таблицы истинных команд (конечно, также после использования символа псевдонима, но это "un*x like")
    • Образы, предназначенные для истинного использования команды, в большинстве случаев не могут быть использованы таким образом (существует где-то, работает с другим синтаксисом, пример: INSTALL)

Не думайте, что в OpenVMS это работает именно так, и на самом деле нет надежного способа. Для DCL-шоу большинство квалификаторов заканчивалось бы в SYS$SYSTEM:SHOW.EXE, но без файла MAP не было бы никакого способа выяснить, какой исходный модуль фактически вошел в этот исполняемый файл. DCL не похож на Bash, где он запускает-исполняет другой процесс и загружает образ этой команды.

Другие вопросы по тегам