如果我有一个命令做一点事在 OpenVMS 中,我可以从哪里看到它来自哪里(脚本/exe 的位置 - 如果它是不同种类的动物,如何定义它)
答案1
$显示进程/全部
$显示条目
$显示条目/完整
答案2
存在三个 DCL“源”,正如您所说,“来自”类似命令的东西。
一个警告:具有可见的显式 DCL 强制执行的语法,例如:
$'dosomething'
这里不计算在内,只计算“可见的类似命令”。
此外,明确的 RUN 或 MCR 命令本身也是命令,因此run dosomething
不再有趣。
如何检查
符号
功能:类似 un*x 别名或者就像“运行一个带有参数的程序”,几乎就像 MCR 做某事一样。
做一个:
$ show symbol dosomething
符号是“首次使用”(如果使用,则优先于后续步骤)
真正的 DCL 命令
没有内置实用程序来检查命令表。
但是您可以设置免费软件 VERB 实用程序。
然后执行以下操作:
$ verb dosomething
“image”和“cliroutine”(在 VERB 输出中)显示运行命令的 .EXE 或内部 DCL 例程。
路径用法
做一个:
$ directory DCL$PATCH:dosomething
如果存在 .COM 或 .EXE 文件,则命令过程的运行方式几乎类似于 之后,
@DCL$PATH:dosomething
或者代码图像的运行方式类似于mcr DCL$PATH:dosomething
。路径使用是“最后的机会”(仅当符号不存在或未使用并且真正的 DCL 命令也不存在时)
以上所有描述中均使用“几乎”,因为语法解释存在细微差异,大多无关紧要。
一些额外的解释
如果存在一个名称与您的“命令”匹配的符号,则符号的内容可以用两种方式翻译:
如果内容以“$”开头,则使用名为“外部命令”的命令并运行其余内容的映像(.EXE 文件),直到分隔符(参数可以像在别名中一样应用);警告:指定的 .EXE 的默认目录是 SYS$SYSTEM:,不是进程的默认!
在所有其他情况下,该值可能发挥类似 un*x 别名的作用。
符号的值“内联”到命令行,并且替换的文本被解释为(“新”)命令。
“可能”一词适用于 SET SYMBOL 设置(检查 HELP SET SYMBOL 了解 VERB 描述)。
请注意,别名进一步解释了其他真实的 dcl 语法(真实命令、用于过程的明确“@”或“不可见的”DCL$PATH 使用),但没有解释下一个符号(别名或外部命令)。
它强烈地不是建议用别名替换任何真正的 DCL 命令,不要这样做!
真正的命令是用 SET COMMAND 命令设置的(很明显),可执行文件(.EXE 映像或内部 DCL 例程)名称与命令名称没有其他关联,即使大多数命令都具有适当的名称(DIRECTORY 命令运行 SYS$SYSTEM:DIRECTORY.EXE 等,但 APPEND 运行 COPY.EXE 而 HELP 运行 VMSHELP.EXE 等)
路径的使用方式与 un*x 类似,但是:
- 仅有的后检查真实命令表(当然,在使用别名符号之后也是如此,但这是“类似 un*x 的”)
- 在大多数情况下,用于真实命令使用的图像可以不是以这种方式使用(存在于某处以不同的语法运行,例如:INSTALL)
答案3
不要以为它在 OpenVMS 中就是这样工作的,据我所知,没有万无一失的方法。对于 DCL show,大多数限定符最终都会出现在 SYS$SYSTEM:SHOW.EXE 中,但如果没有 MAP 文件,就无法确定哪个源模块实际上进入了这个可执行文件。DCL 不像 Bash,它会 fork-exec 另一个进程并加载该命令的映像。