我们说我正在编写一个程序,我希望它遵循XDG基本目录规范来放置文件的位置(app foo
使用$XDG_CONFIG_HOME/foo
作为配置文件的目录,如果XDG_CONFIG_HOME
设置为非空白,或~/.config/foo
,或者如果主目录甚至无法解析,则会显示错误。
是否存在正确/指定的行为,例如设置XDG_CONFIG_HOME
且非空白,但该目录不存在?或者没有这样的变量,~/.config
不存在?是否期望我的程序尝试创建它?或者该文件夹不存在被视为环境/系统部分的错误,我的程序应避免对此做任何事情(只是保释错误)?
注意:我不会问我是否应该创建~/.config/foo
- 显然这是肯定的;我问我是否应该创建~/.config
本身,如果它不存在的话。
(更迂腐:显然有些程序应该创建它们 - 问题在于它是否仅仅是系统的/桌面用户/用户的工作,或者如果任何程序应该尝试创建相关文件夹,如果它们不存在?)
我已经尝试阅读XDG Base Directory Specification,其中说在尝试编写文件时,程序可能会创建必要的目录,但是目前还不清楚这是仅指应用程序&特定的"个人" XDG基本文件夹中的子目录,或者这是否适用于XDG基本文件夹本身。
P.S。通常我很清楚要使用哪些标签,但在这里我真的不确定:请编辑这篇文章或建议改进以给出正确的标签。
答案 0 :(得分:0)
我根据我对这个问题的推理发布了我自己非常试探性/推测性的答案,但我真的想要一个更具权威性/确定性的答案。
我认为一个有用且不做用户可能错误提出的问题的一般格言是一件好事:如果我做XDG_DATA_HOME=~.l/ocal/share
,我可能会我想要的确如此,但是我很可能很多我更容易犯错误。从逻辑上来说,最有帮助,最不具破坏性的事情就是报告在这种情况下缺少所请求的XDG目录。
另外,据我了解,规范的目标部分是为了减少主目录的混乱,因此每次故意做相当于mkdir -p
的效果似乎适得其反。
答案 1 :(得分:0)
来自XDG Base Directory Specification:
如果在尝试写入文件时目标目录为 不存在,应尝试在获得许可的情况下创建它 0700。如果目标目录已经存在,则不应更改权限。该应用程序应做好处理的准备 无法写入文件的情况,因为 目录不存在,无法创建,或其他任何目录 原因。在这种情况下,它可能会选择向 用户。
我将对此进行解释,因此应用程序应尝试创建XDG基本目录(或目标所需的任何目录),并且仅在无法执行此操作时显示错误。