我有一个脚本在我登录时执行git-pull。问题是,如果我对另一个用户说su并用su -lp保留我的环境,脚本会再次运行并且通常会被搞砸了各种原因,因为我是错误的用户。有没有办法在shell脚本中确定我目前是否正在申请?我正在寻找一种不涉及将用户名硬编码到脚本中的方法,这是我目前的解决方案。我使用Bash和ZSH作为shell。
答案 0 :(得分:4)
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
答案 1 :(得分:0)
if test "$(id -u)" = "0"; : # commands executed for root else : # commands executed for non root fi
答案 2 :(得分:0)
如果您使用suid可执行文件更改用户身份,那么您真实有效的用户ID将会有所不同。但是如果使用su(或sudo),它们都将被设置为新用户。这意味着调用getuid()或geteuid()的命令将无用。
更好的方法是检查谁正在运行脚本的终端。如果进程已从其终端分离,这显然不起作用,但除非脚本由守护程序运行,否则这不太可能。试试stat -c %U $(tty)
。我相信who am i
也会在大多数类Unix操作系统上做同样的事情。
答案 3 :(得分:0)
您可以使用“$ UID”环境变量。
如果其值为ZERO,则用户具有SUDO ed .. Bcos root为$ UID == 0
答案 4 :(得分:-2)
嗯......在linux上,如果我对其他用户说su进程su在新用户的进程列表中。
sudo ......不会为你留下这么愉快的事情。
我正在使用zsh ......但我不认为这是特定于shell的。
如果:
%ps | grep“su $”
返回任何内容,然后你在su'd shell中运行。
注意:su $之前有一个空格来排除以su结尾的命令。但是,不要防止任何名为su的自定义程序/脚本。