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是这里的答案。