我说的是~/.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
参考: