我正在尝试编写一个需要添加到的 ansible 角色PATH
。对于 bash,我可以轻松地在中添加文件/etc/profile.d
。但 zsh 显然没有附带/etc/zsh.d
。还有其他推荐的方法吗?
请注意,我显然可以写入.zshenv
,但这可能适用于许多系统,我不想触碰系统安装的文件。 中的任何内容~/
也不可行,因为我想更改PATH
整个系统。
答案1
Ubuntu 中的系统范围zprofile
(/etc/zsh/zprofile
)包含:
# /etc/zsh/zprofile: system-wide .zprofile file for zsh(1).
#
# This file is sourced only for login shells (i.e. shells
# invoked with "-" as the first character of argv[0], and
# shells invoked with the -l flag.)
#
# Global Order: zshenv, zprofile, zshrc, zlogin
emulate sh -c 'source /etc/profile'
/etc/profile
,反过来,.sh
以/etc/profile.d
编程方式获取文件:
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
/etc/profile.d
在其他方面没有什么特别之处。
PATH
您在 中所做的添加/etc/profile.d
应该会影响 zsh 登录 shell。对于 GUI 用户,LightDM 源/etc/profile
,因此任何添加到 都PATH
应该可供任何不重置它的程序使用,包括zsh
。
IMO 系统范围内的添加PATH
应该使用pam_env
(在/etc/environment
或中/etc/security/pam_env.conf
,或者由附加 PAM 规则指定的自定义文件中)。