如果我创建包含以下内容的脚本/root/bin/whoami.sh
:
#!/bin/bash
whoami
并且此脚本由具有正确配置的 sudo 的用户调用,它将指示
root
有没有一种快速的方法来获取脚本中的实际用户,还是我必须求助于传递这个用户名的参数?
如果您使用 $SUDO_USER 将不起作用sudo su -
。
它还需要多次检查 - if $USER == 'root'
then get $SUDO_USER
。
而不是命令whoami
使用who am i
. 这将运行who
为当前会话过滤的命令。它为您提供了比您需要的更多的信息。所以,这样做只是为了得到用户:
who am i | awk '{print $1}'
或者(更简单)您可以使用logname
. 它的作用与上述语句相同。
这将为您提供登录会话的用户名。
这些工作不管sudo
或sudo su [whatever]
。无论调用多少次su
,它也都有效。sudo
我认为$SUDO_USER是有效的。
#!/bin/bash
echo $SUDO_USER
whoami
以下是如何获取调用脚本的人的用户名,无论是否使用 sudo:
if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi
或更短的版本
[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`
如果它是您正在寻找的 UID(对 docker 恶作剧很有用),那么这有效:
LOCAL_USER_ID=$(id -u $(logname))
使用whoami
, who am i
, who
, id
or$SUDO_USER
不在这里。
实际上,who
这永远不是问题的解决方案,因为它只会列出已登录的用户,可能有几十个......
在我看来,唯一有价值的答案是使用logname
.
希望这可以帮助
抢
who am i | awk '{print $1}'
不适合我,但
who|awk '{print $1}'
会为工作服务
奇怪的是,系统确实区分了真实和有效的 UID,但我找不到在 shell 级别导出它的程序。