我有几个实用程序没有自己的目录,只是一个可执行文件。通常我将二进制文件放在 /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没有明显的缺点,而且在任何地方都应该相对不足为奇。
sym*_*ean 18
尽管从历史上看,很多程序都使用 $HOME/.$PROGNAME ,但结果是主目录变得有点混乱。现在首选的约定似乎是 $HOME/.config/$PROGNAME (我目前在 ~ 中有 173 个点文件,其中大部分是历史文物,在 ~/.config 中有 80 个)。
请注意,config和preferences之间有一个重要的区别。前者是系统范围的策略,只能由 root 编辑,而后者应该由用户控制。首选项不应存储在 $HOME 之外的任何地方。
观点
您将实用程序放入其中,/usr/local/bin以便您可以合理地/usr/local/etc/{program_name}用于系统范围的设置或$HOME/.{program_name}本地每用户配置
在一个shell脚本,因为$0包含了程序名,这些路径名可以被确定为"/usr/local/etc/${0##*/}"与"$HOME/.${0##*/}"