在Mac OS X上等效XDG_CONFIG_HOME和XDG_DATA_HOME?

Lea*_*orm 25 macos configuration-files

我打算开发一个跨平台的脚本.在Linux和其他操作系统上,它将存储配置XDG_CONFIG_HOME和数据文件(特别是下载的插件)XDG_DATA_HOME.在Windows上,它将APPDATA用于两者(除非有人有更好的主意).但是,在Mac OS X上做什么是正确的?

在我第一眼浏览一个方便的Macbook ~/Library目录时,我看到了PreferencesApplication Support文件夹.我原本打算使用那些,但Preferences似乎只包含反向域名的plists com.apple.foo.bar.baz.plist,并且每个文件夹都Application Support对应一个bundle in /Applications,所以我不确定系统对与其不匹配的文件的反应有多好标准.直接存储它们~/Library可能是一种选择,但myscript.conf如果有更好的地方,我不想用流浪文件污染它.

我应该在哪里存储这些文件?(请不要只是说~/.myscript.我知道这是Unix的传统,但是在主目录中看到随机的dotfiles让我感到很恼火.)

jla*_*jla 31

将Apple的各种路径文档与XDG Base Directory规范进行比较,大致可以看到以下位置:

  • XDG_CONFIG_HOME ▶︎ ~/Library/Preferences/
  • XDG_DATA_HOME ▶︎ ~/Library/
  • XDG_CACHE_HOME ▶︎ ~/Library/Caches/

在Mac OS X上映射"我的应用程序"的XDG基本目录规范位置可能如下所示:

  • XDG_CONFIG_HOME ▶︎ ~/Library/Preferences/name.often.with.domain.myapp.plist
  • XDG_DATA_HOME ▶︎ ~/Library/My App/
  • XDG_CACHE_HOME ▶︎ ~/Library/Caches/My App/

这些映射似乎很合理,但它们并不精确.某些类型的缓存或数据可能适合于~/Library/Application Support/My App,而其他类型的缓存或数据可能在临时位置或应用程序包中最佳.所有这些都是按照惯例,使用最佳XDG_位置的相同原因适用于使用Mac OS X系统上的最佳位置.

您的烦恼~/.myscript符合Apple的指导方针:"不要污染用户空间".

参考文献:

  • XDG _*_ HOME不是特定于应用程序的 - 您的示例应该是"XDG_CONFIG_HOME - >〜/ Library/Preferences /","XDG_DATA_HOME - >〜/ Library /"和"XDG_CACHE_HOME - >〜/ Library/Caches /".(你的帖子虽然有用!我只是为后人提供这个小修正) (3认同)

Fra*_* Yu 10

我同意OJFord的评论:如果您正在编写脚本,只需遵循XDG基本目录会更好。

理由:

  1. 中的名称XDG_CONFIG_HOME通常是小写的裸名,例如git;中的~/Library/Preferences/域名通常以反向域名(如com.apple.foo-bar)或首字母大写空格分隔的名称(如)为范围Foo Bar
  2. 将GUI应用程序放入时,它们一直遵循macOS约定/Applications。您无需将脚本放入/Applications;您可以将它们放在UNIX特定的目录中。最好保持一致。
  3. ~/Library/Preferences/充满.plists。据我所知,没有跨平台脚本正在使用属性列表。
  4. 用户可能希望分别同步跨平台配置和仅macOS的配置。

例如,Git将其配置文件放在中XDG_CONFIG_HOME/git/config,而不是中~/Library/Preferences/Git/config。我感觉合理。

注意

我只针对配置文件($XDG_CONFIG_HOME)和数据文件($XDG_DATA_HOME);对于缓存文件,它变得微妙。根据How-To Geek,默认情况下~/Library/CachesTime Machine中不包含目录。我不在乎缓存文件夹,因为无论如何我都不备份两个目录。

  • 完全同意。我希望更多的脚本和 CLI 程序在所有 *nix 平台上采用 XDG。 (2认同)

Yuj*_*uji 5

我会使用~/Library/Application Support/script_name/. 里面的子目录Application Support通常被各种应用程序使用,包括苹果自己的软件。但它不是由操作系统强制执行的,也不受内部应用程序的约束/Applications。因此,您可以完全自由地在其中创建自己的目录。

有关 OS X 的一般目录结构,请参阅此 Apple 文档

  • 链接似乎已过时,也许是这个:https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-开关1 (3认同)