当通过sudo或su运行脚本时,我想获取原始用户。无论多个sudo
或su
在彼此内部运行,尤其是sudo su -
,都应该发生这种情况。
发布于 2011-01-05 04:30:24
结果:
使用who am i | awk '{print $1}'
或logname
,因为不能保证使用其他方法。
以self身份登录:
evan> echo $USER
evan
evan> echo $SUDO_USER
evan> echo $LOGNAME
evan
evan> whoami
evan
evan> who am i | awk '{print $1}'
evan
evan> logname
evan
evan>
普通sudo:
evan> sudo -s
root> echo $USER
root
root> echo $SUDO_USER
evan
root> echo $LOGNAME
root
root> whoami
root
root> who am i | awk '{print $1}'
evan
root> logname
evan
root>
sudo su -:
evan> sudo su -
[root ]# echo $USER
root
[root ]# echo $SUDO_USER
[root ]# echo $LOGNAME
root
[root ]# whoami
root
[root ]# who am i | awk '{print $1}'
evan
[root ]# logname
evan
[root ]#
sudo su -;su:
evan> sudo su -
[root ]# su tom
tom$ echo $USER
tom
tom$ echo $SUDO_USER
tom$ echo $LOGNAME
tom
tom$ whoami
tom
tom$ who am i | awk '{print $1}'
evan
tom$ logname
evan
tom$
发布于 2012-10-20 07:39:46
这是我在HP-UX上编写的ksh
函数。我不知道它将如何在Linux中与Bash
一起工作。其思想是,sudo
进程以原始用户身份运行,子进程是目标用户。通过循环返回父进程,我们可以找到原始进程的用户。
#
# The options of ps require UNIX_STD=2003. I am setting it
# in a subshell to avoid having it pollute the parent's namespace.
#
function findUser
{
thisPID=$$
origUser=$(whoami)
thisUser=$origUser
while [ "$thisUser" = "$origUser" ]
do
( export UNIX_STD=2003; ps -p$thisPID -ouser,ppid,pid,comm ) | grep $thisPID | read thisUser myPPid myPid myComm
thisPID=$myPPid
done
if [ "$thisUser" = "root" ]
then
thisUser=$origUser
fi
if [ "$#" -gt "0" ]
then
echo $origUser--$thisUser--$myComm
else
echo $thisUser
fi
return 0
}
我知道最初的问题来自很久以前,但人们(比如我)仍然在问,这看起来是一个很好的解决方案的地方。
发布于 2011-01-05 22:13:01
使用logname(1)获取用户的登录名如何?
https://stackoverflow.com/questions/4598001
复制相似问题