我如何判断 zsh 是否以特权运行?

我如何判断 zsh 是否以特权运行?

在我的 .zshrc 中,我有一些命令可以启动各种程序的实例,例如 Mozilla Firefox 和 Evolution。我显然不想以 root 身份启动它们,所以我想在启动它们之前检查我是否是 root。我该怎么做?

答案1

您可以使用例如这样的条件语句:

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

它首先检查真实用户ID或者有效用户 IDzero, 也就是说root

如果是,它将按照用户在变量中定义的方式sudo运行变量中定义的程序。(如果只想要警告消息,则可以省略此行。)PRGCMDPRGUSR

${(z)PRGCMD}分裂就像 zsh 命令行一样如果PRGCMD包含空格,即程序的参数。

一个简短的变体,仅以非 root 身份运行该程序:[[ $UID != 0 || $EUID != 0 ]] && firefox


此外,你也许想要将其包含%#在你的提示中,这样你就可以看到你当前的 shell 是具有特权的。来自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.

代码判断shell 正在以特权运行privasserted()(在中定义utils.c)在我看来不能在 shell 代码中完成,所以如果你想要完全相同的行为,最好解析%#提示扩展的输出:

[[ $(print -P "%#") == '#' ]] && echo shell privileged || echo shell not privileged

相关内容