【问题标题】:Can VMS filenames combine logical names and subdirectories?VMS 文件名可以结合逻辑名称和子目录吗?
【发布时间】:2012-03-16 14:37:03
【问题描述】:
我想知道在 VMS 上使用文件名和逻辑名(在此上下文中为 ~ 文件名别名)的灵活性是否存在明显限制。
您可以使用 [dir]name 或 [.subdir]name 之类的名称,并且可以将它们与 dskxy:[dir]name 甚至 dskxy:[.subdir]name 之类的设备结合使用。
然后是逻辑名称,例如SYS$LOGIN,你可以形成像 SYS$LOGIN:name 这样的文件名。
很自然地使用 SYS$LOGIN:[.subdir]name 但这似乎不被接受。
我是否忽略了某些东西,还是同样不灵活?
【问题讨论】:
标签:
filenames
vms
openvms
dcl
【解决方案1】:
确实,SYS$LOGIN:[.X] 无法解析会令人沮丧。
在游戏中考虑将其修复为“做我的意思,而不是我说的”为时已晚。
OpenVMS 的政策是“按我说的做,把它做好”。
如果您认为该示例映射到无效的语法,这有点道理:
dev:[logindir][.x]
但这会起作用:
dev:[logindir.][x]
放置那个“。”的微妙但重要的区别
也许有人会争辩说,任何“][”都应该被默默地删除,对吧?
dskxy:[.subdir]name 之所以有效,是因为当前的默认目录是在其中编织的。
它映射到 dev:[default_dir.subdir]name
这也许就是从未改变的原因。
SYS$LOGIN:[.X] 是否应该在解析中包含当前默认目录?
您期望不会,但现有的主要 OpenVMS 行为表明它应该存在。
您有时可以通过定义一个根目录来解决它,例如:
$define/trans=conceal sys_login dev:[default_dir.]
现在你可以说 $ dir sys_login:[subdir]
但是现在必须不存在领先时期,而逻辑本身无济于事。
它需要 sys_login:[000000] 才能工作。
我不是真的在帮你吗?
希望这会有所帮助,
海因
【解决方案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 体验更加满意。