程序应该创建 XDG 文件夹吗?

Should A Program Create XDG Folders?

假设我正在编写一个程序,我希望它遵循 XDG 基本目录规范来放置文件(应用程序 foo 使用 $XDG_CONFIG_HOME/foo 作为配置文件的目录如果 XDG_CONFIG_HOME 已设置且非空,或者 ~/.config/foo,或者如果主目录甚至无法解析则失败并出现错误)。

是否存在 correct/specified 行为,例如 XDG_CONFIG_HOME 已设置且非空白,但该目录不存在?或者如果没有这样的变量,并且 ~/.config 不存在?是否期望我的程序尝试创建它?或者该目录的不存在是否被认为是环境方面的错误s/system,我的程序应该避免对此做任何事情(只是出现错误就保释)?

注意:我不是在问我是否应该创建 ~/.config/foo - 显然是的;我在问我是否应该创建 ~/.config 本身,如果它不存在的话。

(更迂腐一点:显然某些程序应该创建它们 - 问题是它是否完全是系统's/desktop's/user 的工作,或者是否有任何程序应该如果不存在,请尝试创建相关目录?)

我试过阅读 XDG Base Directory Specification,它说当试图写入其文件时,程序可能会创建必需的目录,但不清楚这是否仅指应用程序的特定/"personal" XDG 基本目录中的子目录,或者如果这意味着 XDG 基本目录本身。

P.S。通常我很清楚要使用什么标签,但在这里我真的不确定:请编辑此 post 或提出改进建议以赋予它适当的标签。

经过几年的思考,我确定了自己的答案:

  1. 从不 创建非标准 base XDG 目录,但是
  2. 可能可以自动创建标准 XDG 基本目录,并且
  3. 应该在基本目录中自动创建任何您的应用程序的子目录

我认为自动提供帮助可能很好,但不要加重用户的错误也很重要

如果我在我的环境变量配置中写 XDG_DATA_HOME=~/.locals/hare,我 可能 想要那个,但更有可能是我打错了 ~/.local/share.因此,在这种情况下,最有帮助、破坏性最小且错误最少的做法是报告缺少所请求的 XDG 基本目录。

因此,如果用户指定了自定义 XDG 基目录,而该基目录不存在,则永远不要尝试创建它。不要让你的用户处于这样一种情况,例如,在他们的标准 ~/.config 目录旁边,他们会得到一个 ~/.configs~/.comfig 目录,其中也包含他们的一些配置,直到有一天他们修复打字错误和他们的程序突然表现得好像被重置为默认值。在这种情况下,及早发现错误是长运行中最有帮助的事情,因此请立即告诉用户“这不存在”。

但是如果用户没有要求自定义基本目录,而您将要使用已知的标准位置,那么尝试自动创建它就可以了,如果您确保仅在具有合理所有权、权限等的情况下创建它

最后,当基本 XDG 目录存在时,大多数应用程序可能应该在其中创建自己的子目录,并且您绝对应该创建该应用程序特定目录以及任何其他子目录在那个里面,自动。

来自XDG Base Directory Specification

If, when attempting to write a file, the destination directory is non-existant an attempt should be made to create it with permission 0700. If the destination directory exists already the permissions should not be changed. The application should be prepared to handle the case where the file could not be written, either because the directory was non-existant and could not be created, or for any other reason. In such case it may chose to present an error message to the user.

我会这样解释,因此应用程序应尝试创建 XDG 基本目录(或目标所需的任何目录),并且仅在无法创建时才显示错误。