2010-01-20 41 views
2

我有一个脚本,当我登录时执行git-pull。问题是,如果我su使用不同的用户并使用su -lp保护我的环境,则脚本会再次运行并且通常会变得混乱原因是因为我是错误的用户。有没有一种方法可以在shell脚本中确定我目前是否在使用SUing?我正在寻找一种不涉及将我的用户名编码到脚本中的方法,这是我目前的解决方案。我使用Bash和ZSH作为炮弹。判断用户是否在shell脚本中有SUed?

回答

4

您可以使用who命令的输出与id命令:

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 
+0

你也可以用 “$ UID” 环境变量。这更好,因为你不需要输出任何命令,所以它会更快.. – 2010-01-23 12:09:25

+0

if [$ UID -eq 0]; then ...... fi – 2010-01-23 12:11:02

-2

嗯....在Linux上,如果我su到其他用户的进程苏是新用户的进程列表。

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

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

如果:

%PS | grep“su $”

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

注意:su $之前有一个空格,用于排除仅以su结尾的命令。尽管如此,并不防范任何自定义的程序/脚本。

0
 
if test "$(id -u)" = "0"; 
    : # commands executed for root 
else 
    : # commands executed for non root 
fi 
+0

但是,如果你想要一个不同的非root用户?这就是我对这个问题的理解。 – SuperMagic 2010-01-20 18:57:25

0

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

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

0

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

如果它的值是零,则用户SUDO .. BCOS根为$ UID == 0

+0

除有时我su以外的其他用户... – spitfire 2010-01-27 21:22:20

相关问题