更改原始 (AppleScript .scpt) 文件后硬 link 中断

Hard link breaks after changing original (AppleScript .scpt) file

我有一个 AppleScript 库文件 (.scpt) 保存在 ~/Library/Script Libraries 中,我用它来调用其他脚本中的处理程序。 我还想将该文件保留为 git 存储库的一部分。所以我的想法是:在 ~/Library/Script Libraries 中为我存储库中的文件创建一个硬 link。

当我第一次打开硬盘 link 时,我看到的结果与在我的存储库中打开原始文件时看到的结果完全相同。

在终端中检查硬盘 link 呈现以下结果:

-rw-r--r--@ 2 username  staff  50458 May 15 16:45 MyLibrary.scpt

注意文件大小和硬 link 的数量 (2)。

当我更改目标文件中的某些内容时,硬 link 不再起作用。即使我只是打开 .scpt 文件,并在不做任何更改的情况下保存它,硬盘 link 似乎已损坏。

当我在终端中检查硬盘 link 时,它显示如下:

-rw-rw-rw-@ 1 username  staff  0 May 15 16:45 MyLibrary.scpt

所以是0字节,hard的个数link减为1个

为什么这不起作用?保存原始文件会改变它引用的inode吗?

如果硬 links 中断,然后脚本编辑器像许多应用程序和程序一样,将内容写入新文件。但是,符号 links 应该可以工作。因此,解决方案是使用符号 links。缺点是,如果您移动文件,符号 link 会中断。 (符号 link,实际上使用的是文件的 name/path,而不是 inode 编号。)现在,如果你只是 linking 到本地存储库,那么也许你可以得到通过使用别名,但我怀疑当你 push/pull 到外部仓库时它会起作用。 Github,可能永远不会在 hfs 磁盘上标准化。 ;)

我最终通过在 Sublime Text 中更改我的 AppleScript 构建系统解决了这个问题。

{
    "cmd": ["/usr/bin/osascript", "$file"],

    "variants": [
        {
            "name": "Script Library",
            "cmd": ["/usr/bin/osacompile", "-o", "/Volumes/harddisk/Users/username/Library/Script Libraries/$file_base_name.scpt", "$file"]
        }        
    ]
}

我编辑了存储库中跟踪的 .applescript 文件。 当我 运行 Build 命令时,.applescript 文件被编译成 Script Libraries 文件夹中的 .scpt 变体。