是否有标准指定的用户配置文件位置?

是否有标准指定的用户配置文件位置?

我说的是~/.foo在用户的主目录中找到的文件。我正在开发一个从这样的文件读取的程序,如果可以的话,我还想清理我的用户根目录。

是否有 POSIX 指定的变量,例如可以~/$(conf)在哪里找到 config like ?.emacs

答案1

POSIX

搜索字符串“用户配置”或“配置文件”的规范,结果为零,所以我想说不,它没有以任何方式指定这一点。

FHS

看着FHS - 文件系统层次结构标准它有这样一点:

应用程序的用户特定配置文件存储在用户主目录中以“.”开头的文件中。字符(“点文件”)。如果应用程序需要创建多个点文件,则应将它们放置在名称以“.”开头的子目录中。字符,(“点目录”)。在这种情况下,配置文件不应以“.”开头。特点。11

系统配置/获取配置

浏览 POSIX 配置常量列表<limits.h>是我能想到的唯一可以配置类似内容的地方。运行该命令getconf <var>将返回这些类型的结果。

例如:

$ getconf _POSIX_CHILD_MAX
1024

但浏览定义列表时,我没有看到任何与用户主目录相关的内容。

答案2

大约 10 多年前定义并最近采用的标准是使用~/.config/~/.cache/~/.local/share/其他一些位置以标准方式存储用户的配置、缓存和数据。

这是由以下定义的环境变量,例如$XDG_CONFIG_HOME$XDG_CACHE_HOME$XDG_DATA_HOME等。在大多数环境中它们仍然很少被预先定义,但是测试它们的存在可能仍然是一个好主意,如果尚未预先设置,则自行设置官方默认值,然后在您自己的变量中使用这些特定变量作为配置位置;通过这种方式,您可以向任何潜在用户、开发人员或源代码研究人员发出信号,表明您正在使用这些标准位置进行配置、缓存和数据(因为否则,搜索~/.config/$HOME/.config/可能会或可能不会工作,具体取决于编程语言和搜索机制)。

if [ "x$XDG_CONFIG_HOME" = "x" ] ; then
    XDG_CONFIG_HOME="$HOME/.config"
fi
CONFIG_FILE="$XDG_CONFIG_HOME/myprog/myprog.conf"

例如,也许您在构建系统中使用 Golang,并且希望将构建系统特有的下载的 Go 包缓存在特定于构建的目录中,那么可以使用以下 shell 脚本来完成所有设置:

if [ "x$XDG_CACHE_HOME" = "x" ] ; then
    XDG_CACHE_HOME="$HOME/.cache"
fi
GO_MOD_CACHE_DIR="$XDG_CACHE_HOME/myprog/go-mod-cache"
mkdir -p "$GO_MOD_CACHE_DIR"
if [ -w "$GO_MOD_CACHE_DIR/" ] ; then
    export GOMODCACHE="$GO_MOD_CACHE_DIR"
else
    printf "WARN: GOMODCACHE directory not writeable: %s\n" "$GO_MOD_CACHE_DIR"
fi

参考:

相关内容