小型实用程序应该在哪里存储他们的偏好?

Tyl*_*den 21 file-management

我有几个实用程序没有自己的目录,只是一个可执行文件。通常我将二进制文件放在 /usr/local/bin 中。我遇到的一个问题是如何管理首选项设置。

一种想法是使用环境变量并要求用户定义此类变量,例如,在他们的 bash.rc 中。然而,我有点不情愿地将 bash.rc 与小程序的杂项首选项设置弄得一团糟。

是否有标准(或标准建议)定义了一些适合存储没有自己目录的小型实用程序的首选项的位置或方法?

Use*_*ess 41

用于交互式桌面使用的小型实用程序应遵循XDG 基本目录规范,并将其配置文件保存在

$XDG_CONFIG_HOME
Run Code Online (Sandbox Code Playgroud)

或(如果为空或未设置)默认为

$HOME/.config
Run Code Online (Sandbox Code Playgroud)

非 GUI 工具的情况不太清楚,因为它们可能运行在无头或不遵守 XDG/freedesktop 标准的系统上。

但是,使用$XDG_CONFIG_HOMEif set 或$HOME/.configif not没有明显的缺点,而且在任何地方都应该相对不足为奇。

  • 关键短语是*用于交互式桌面使用*。命令行可执行文件可能根本不应该具有可定义的首选项,并且应该更喜欢用于自定义行为的命令行参数。 (4认同)
  • 我不确定我是否同意这一点。许多命令行可执行文件具有持久的每个用户配置 - 例如`git` 具有用户级配置,如果我的`~/.gitrc` 位于`~/.config/git` 中,我不会真正反对. (2认同)

sym*_*ean 18

尽管从历史上看,很多程序都使用 $HOME/.$PROGNAME ,但结果是主目录变得有点混乱。现在首选的约定似乎是 $HOME/.config/$PROGNAME (我目前在 ~ 中有 173 个点文件,其中大部分是历史文物,在 ~/.config 中有 80 个)。

请注意,configpreferences之间有一个重要的区别。前者是系统范围的策略,只能由 root 编辑,而后者应该由用户控制。首选项不应存储在 $HOME 之外的任何地方。

  • 创建子目录而不仅仅是文件的两个相关的小优势:1)如果您将来需要另一个文件,您已经有一个目录将它们保存在一起,并且不需要处理从单个文件的迁移-> 子目录;2) 同样,如果用户出于某种原因想要保留两个版本的配置文件,则可以将两者一起保存在子目录中(也可以很好地配对,允许他们传递配置文件以在命令行上使用) (9认同)
  • 没有什么可以阻止您将单个文件放入 .config 而不是目录中 - 但单个 inode 的成本并不高。 (7认同)
  • 请注意`~/.config` 是默认路径,但实际的用户设置路径存储在`$XDG_CONFIG_HOME` 中。确保在设置且不为空时使用用户的首选路径。 (7认同)
  • 他们_不需要_这样做(但也许他们希望将来允许多个配置文件)。只需`~/.config/swaycfg` 或其他也应该没问题。 (2认同)

roa*_*ima 9

观点

您将实用程序放入其中,/usr/local/bin以便您可以合理地/usr/local/etc/{program_name}用于系统范围的设置或$HOME/.{program_name}本地每用户配置

在一个shell脚本,因为$0包含了程序名,这些路径名可以被确定为"/usr/local/etc/${0##*/}""$HOME/.${0##*/}"

  • `/usr/local/etc` 用于特定于主机的配置,而不是特定于用户的配置。[FHS 参考](https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s09.html) (3认同)
  • 好吧,我不想做一些奇怪和特殊的事情。我想做一些人们会期望、理解和认可的标准做法。 (2认同)