Por que não há /etc/zsh.d/ no Ubuntu, e onde devo adicionar opções de todo o sistema?

0

Estou tentando escrever uma função ansible que precisa ser adicionada ao PATH . Para o bash, posso adicionar facilmente um arquivo em /etc/profile.d . Mas aparentemente o zsh não vem com /etc/zsh.d . Existe outro método recomendado?

Note que eu obviamente poderia escrever para .zshenv , mas isso é possível para muitos sistemas e eu não quero tocar nos arquivos instalados pelo sistema. Qualquer coisa em ~/ também é impraticável, já que eu quero alterar PATH em todo o sistema.

    
por MattW. 23.04.2016 / 21:57

1 resposta

1

O zprofile ( /etc/zsh/zprofile ) no Ubuntu contém:

# /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 , por sua vez, origina .sh arquivos em /etc/profile.d programaticamente:

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 não é especial em nenhum outro aspecto.

As adições ao PATH que você faz em /etc/profile.d devem afetar os shells de login do zsh. E, para usuários da GUI, as fontes LightDM /etc/profile , portanto, todas as adições ao PATH devem estar disponíveis para qualquer programa que não o redefina, incluindo zsh .

IMO Todo o sistema adições para PATH deve ser feito usando pam_env (em /etc/environment ou /etc/security/pam_env.conf ou arquivos personalizados especificados por uma regra PAM adicional).

    
por muru 23.04.2016 / 22:08