【问题标题】: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 体验更加满意。

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多