![为什么 ubuntu 中没有 /etc/zsh.d/,我应该在哪里添加系统范围的选项?](https://linux22.com/image/1135606/%E4%B8%BA%E4%BB%80%E4%B9%88%20ubuntu%20%E4%B8%AD%E6%B2%A1%E6%9C%89%20%2Fetc%2Fzsh.d%2F%EF%BC%8C%E6%88%91%E5%BA%94%E8%AF%A5%E5%9C%A8%E5%93%AA%E9%87%8C%E6%B7%BB%E5%8A%A0%E7%B3%BB%E7%BB%9F%E8%8C%83%E5%9B%B4%E7%9A%84%E9%80%89%E9%A1%B9%EF%BC%9F.png)
我正在尝试编写一个需要添加到的 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 规则指定的自定义文件中)。