我想知道在 VMS 上使用文件名和逻辑名称(在此上下文中为 ~ 文件名别名)的灵活性是否存在明显限制。您可以使用 [dir]name 或 [.subdir]name 之类的名称,并且可以将它们与 dskxy:[dir]name 甚至 dskxy:[.subdir]name 之类的设备结合使用。然后是逻辑名称,例如 SYS$LOGIN,您可以形成文件名,如 SYS$LOGIN:name。很自然地使用 SYS$LOGIN:[.subdir]name 但这似乎不被接受。我是否忽略了某些东西,或者它是否同样不灵活?
2 回答
sys$login 不是“home”根的一个很好的等价物,因为它是一个逻辑目录,您需要“设置默认值”。
如果您需要引用“home”下的目录,您可能需要定义一个对应于 sys$login 目录的根/设备逻辑。
$define/job home$r 'f$str(f$trnlnm("sys$login")- ".]["-"]" + ".]") /trans=conceal
注意“.]”和“隐藏”,它们会将其定义为有根设备。记住不能有双重隐藏的逻辑是很好的,因为 CLI 只翻译一次(因此从翻译的 sys$login 中减去“.][”)。这将它定义为“工作级别”,即您工作中的所有流程都会知道它。
在您的 LOGIN.COM 中进行此定义将让您参考以下内容: home$r:[mydir] 相当于“/home$r/mydir”
希望它能让您的 VMS 体验更加满意。
事实上,SYS$LOGIN:[.X] 不解析会令人沮丧。在游戏中考虑将其修复为“做我的意思,而不是我说的”为时已晚。OpenVMS 的政策是“按我说的做,把它做好”。
如果您认为该示例映射到无效语法,这有点道理:
dev:[logindir][.x]
但这会起作用:
dev:[logindir.][x]
放置那个“。”的微妙但重要的区别。也许有人会争辩说,任何“][”都应该被默默地删除,对吧?
dskxy:[.subdir]name 之所以有效,是因为当前的默认目录是在其中编织的。它映射到 dev:[default_dir.subdir]name
这也许就是从未改变的原因。SYS$LOGIN:[.X] 是否应该在解析中包含当前默认目录?您期望不会,但现有的主要 OpenVMS 行为表明它应该存在。
您有时可以通过定义一个根目录来解决它,例如:
$ 定义/trans=隐藏 sys_login dev:[default_dir.]
现在你可以说 $ dir sys_login:[subdir]
但是现在领先时期一定不存在,而逻辑本身无济于事。它需要 sys_login:[000000] 才能工作。
我不是真的在帮你吗?
希望这会有所帮助,海因