为什么 ubuntu 中没有 /etc/zsh.d/,我应该在哪里添加系统范围的选项?

为什么 ubuntu 中没有 /etc/zsh.d/,我应该在哪里添加系统范围的选项?

我正在尝试编写一个需要添加到的 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 规则指定的自定义文件中)。

相关内容