本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
environment.d — 定义 systemd 用户实例的运行环境
~/.config/environment.d/*.conf
/etc/environment.d/*.conf
/run/environment.d/*.conf
/usr/lib/environment.d/*.conf
/etc/environment
environment.d
目录中包含了一系列
用于设置用户运行环境的"全局"环境变量。
systemd-environment-d-generator(8)
将会使用这些变量来更新 systemd 用户实例(--user)所启动的服务的
运行环境。
为了简化配置文件的排序,建议在所有配置文件的名字中都使用两位数字的前缀。
出于向后兼容的原因,将会默认安装一个指向 /etc/environment
的软连接,
以确保包含该文件的内容。
配置文件依次从
/etc/
, /run/
, /usr/lib/
目录中读取。
配置文件的名称必须符合
格式。
对于不同目录下的同名配置文件,仅以优先级最高的目录中的那一个为准。
具体说来就是:
filename
.conf/etc/
的优先级最高、
/run/
的优先级居中、
/usr/lib/
的优先级最低。
软件包应该将自带的配置文件安装在
/usr/lib/
目录中。
/etc/
目录仅供系统管理员使用。
所有的配置文件(无论位于哪个目录中),
统一按照文件名的字典顺序处理。
如果在多个配置文件中设置了同一个选项,
那么仅以文件名最靠后(字典顺序)的那一个为准。
为了便于排序,建议给所有配置文件
都加上两位十进制数字的文件名前缀。
如果系统管理员想要屏蔽 /usr/lib/
目录中的某个配置文件,
那么最佳做法是在 /etc/
目录中
创建一个指向 /dev/null
的同名符号链接,
即可彻底屏蔽 /usr/lib/
目录中的同名文件。
如果软件包自带的某个配置文件位于 initrd 镜像中,
那么还必须重新生成 initrd 镜像。
配置文件包含一系列由换行符分隔的
"
"
行。可以在等号右侧使用
"KEY
=VALUE
${OTHER_KEY}
"
或 "$OTHER_KEY
" 格式直接引用先前已经定义过的环境变量;也可以在等号右侧使用
"${
"
格式表示如果环境变量 FOO
:-DEFAULT_VALUE
}FOO
的值为空,那么展开为 DEFAULT_VALUE
(相当于默认值),
否则严格按照 "${
" 的方式按原值展开;
还可以在等号右侧使用
"FOO
}${
"
格式表示如果环境变量 FOO
:+ALTERNATE_VALUE
}FOO
的值为非空,那么展开为 ALTERNATE_VALUE
(相当于强制替换为另一个值),
否则严格按照 "${
" 的方式展开为空值。
除此之外,不再支持任何其他的 shell 语法。FOO
}
每一个 KEY
都必须是一个合格的变量名(符合变量命名规则)。
空行或者以 "#
" 开头的行都将被忽略。
例 1. 设置环境变量以允许访问安装在
/opt/foo
目录中的程序
/etc/environment.d/60-foo.conf
:
FOO_DEBUG=force-software-gl,log-verbose PATH=/opt/foo/bin:$PATH LD_LIBRARY_PATH=/opt/foo/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} XDG_DATA_DIRS=/opt/foo/share:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share/}