4

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

3 ответа3

2

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

$ SHOW ENTRY

$ SHOW ENTRY/FULL

1

Существует три "источника" 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)
0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .