Você pode usar, por exemplo, tal declaração condicional:
PRGCMD="firefox"
PRGUSR="user"
if [[ $UID == 0 || $EUID == 0 ]]; then
# root
echo Running programm as User $PRGUSR
sudo -u $PRGUSR ${(z)PRGCMD}
else
${(z)PRGCMD}
fi
Ele verifica primeiro se o ID do usuário real ou o ID do usuário efetivo é zero
, ou seja, root
.
Em caso afirmativo, ele usa sudo
para executar o programa definido na variável PRGCMD
como o usuário definiu na variável PRGUSR
. (Você pode omitir esta linha se quiser apenas a mensagem de aviso).
${(z)PRGCMD}
divide palavras como se a linha de comando zsh no caso PRGCMD
contenha espaços, ou seja, parâmetros para o programa.
Uma variante curta, que apenas executa o programa como não-raiz, é: [[ $UID != 0 || $EUID != 0 ]] && firefox
Além disso, talvez você queira incluir %#
em seu prompt, para que você possa ver que seu shell atual é privilegiado. De man zshmisc
:
%# A '#' if the shell is running with privileges, a '%' if not. Equivalent to '%(!.#.%%)'. The definition of 'privileged', for these
purposes, is that either the effective user ID is zero, or, if POSIX.1e capabilities are supported, that at least one capability is
raised in either the Effective or Inheritable capability vectors.
O código que julga se o shell está sendo executado com privilégios (definido em privasserted()
in utils.c
) pode IMHO não ser feito no código shell, então se você quiser exatamente o mesmo comportamento é provavelmente o melhor para analisar a saída da expansão de prompt %#
:
[[ $(print -P "%#") == '#' ]] && echo shell privileged || echo shell not privileged