Answers:
如果您使用的是$ SUDO_USER,则无法使用sudo su -
。
它还需要进行多次检查-如果可以,$USER == 'root'
则进行检查$SUDO_USER
。
代替命令whoami
使用who am i
。这将运行who
为当前会话过滤的命令。它为您提供了比您所需更多的信息。因此,执行以下操作仅获得用户:
who am i | awk '{print $1}'
另外(更简单),您可以使用logname
。它的作用与上述声明相同。
这为您提供了登录会话的用户名。
这些工作无论sudo
或sudo su [whatever]
。它也可以多少次,无论su
与sudo
被调用。
who am i
是who mom likes
。你的选择。
who
为我返回2行,都包含我的名字,who am i
但不返回。有什么帮助吗?
who am i
不执行任何操作,这似乎很简单who
,因此who | awk '{print $1}'
可以按预期工作;)
awk
安装,也可以使用cut
: who mom likes | cut -d' ' -f1
或sed
出于某些原因: who mom likes | sed -n 's/^\([^ ]*\).*/\1/p'
我认为$ SUDO_USER是有效的。
#!/bin/bash
echo $SUDO_USER
whoami
sudo env
显示SUDO_USER
但sudo echo $SUDO_USER
什么也没印出来……
$SUDO_USER
它与不兼容sudo su -
,但logname
始终有效。
无论是否使用sudo,这都是如何获取调用脚本的人的用户名:
if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi
或更短的版本
[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`
user=${SUDO_USER:-$(whoami)}
或user=$(logname)
奇怪的是,系统确实区分了真实的UID和有效的UID,但是我找不到在shell级别导出此UID的程序。
who am i
是这里的答案。