2

我有一个在登录时执行 git-pull 的脚本。问题是,如果我 su 到另一个用户并使用 su -lp 保留我的环境,脚本会再次运行并且通常会因为各种原因而变得混乱,因为我是错误的用户。有没有办法在 shell 脚本中确定我目前是否正在起诉?我正在寻找一种不涉及将我的用户名硬编码到脚本中的方法,这是我目前的解决方案。我使用 Bash 和 ZSH 作为 shell。

4

5 回答 5

4

You could use the output of the who command with the id command:

WHO=`who am i | sed -e 's/ .*//'`
ID_WHO=`id -u $WHO`
ID=`id -u`
if [[ "$ID" = "$ID_WHO" ]]
then
    echo "Not su"
else
    echo "Is su"
fi
于 2010-01-20T16:27:26.993 回答
0

如果您使用 suid 可执行文件更改用户身份,您的真实有效用户 ID 将不同。但如果使用使用 su(或 sudo),它们都将被设置为新用户。这意味着调用 getuid() 或 geteuid() 的命令将没有用处。

更好的方法是检查谁拥有正在运行脚本的终端。如果进程已与其终端分离,这显然不起作用,但除非脚本由守护进程运行,否则这不太可能。试试stat -c %U $(tty)。我相信who am i在大多数类 Unix 操作系统上也会做同样的事情。

于 2010-01-20T17:47:58.510 回答
0
如果测试“$(id -u)”=“0”;
  : # 为 root 执行的命令
别的
  : # 为非 root 执行的命令
菲
于 2010-01-20T16:54:05.587 回答
0

您可以使用“$UID”环境变量。

如果其值为零,则用户已 SUDO ed .. Bcos root as $UID==0

于 2010-01-23T12:07:52.113 回答
-2

好吧....在 linux 上,如果我 su 到另一个用户,则进程 su 在新用户的进程列表中。

sudo... 不会给你留下这么愉快的事情。

我正在使用 zsh ......但我认为这不是特定于 shell 的。

如果:

%ps | grep“苏$”

返回任何东西,然后你在一个 su'd shell 中运行。

注意:在 su$ 之前有一个空格来排除以 su 结尾的命令。但是,它不防范任何名为 su 的自定义程序/脚本。

于 2010-01-20T16:34:01.297 回答