如果我创建的脚本/root/bin/whoami.sh包含:
/root/bin/whoami.sh
#!/bin/bash whoami
如果用户使用正确配置的sudo调用此脚本,它将指示
root
有没有一种快速的方法可以在脚本中获得实际的用户,或者我必须求助于沿着这个用户名的参数?
axkjgtzd1#
如果您使用的是sudo su -,则$SUDO_USER不起作用。它还需要多次检查-如果$USER == 'root',则得到$SUDO_USER。使用who am i代替whoami命令。这将运行为当前会话过滤的who命令。它提供的信息比你需要的更多。所以,这样做只得到用户:
sudo su -
$USER == 'root'
$SUDO_USER
who am i
whoami
who
who am i | awk '{print $1}'
或者(更简单),您可以使用logname。它的作用与上面的语句相同。这将为您提供登录到会话的用户名。无论sudo还是sudo su [whatever],这些都可以工作。无论su和sudo被调用多少次,它都能正常工作。
logname
sudo
sudo su [whatever]
su
a7qyws3x2#
我认为$SUDO_USER是有效的。
#!/bin/bash echo $SUDO_USER whoami
uxhixvfz3#
以下是如何获取调用脚本的人的用户名,无论是否sudo:
if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi
或者更短的版本
[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`
nwwlzxa74#
使用whoami、who am i、who、id或$SUDO_USER在这里是不正确的。实际上,who永远不会解决这个问题,因为它只会列出登录的用户,这可能是几十个。在我看来,唯一有价值的答案就是使用logname。希望这个能帮上忙罗伯
id
vsaztqbk5#
如果它是你正在寻找的UID(对docker恶作剧很有用),那么这个工作:
LOCAL_USER_ID=$(id -u $(logname))
dphi5xsq6#
who am i | awk '{print $1}'不适合我,但who|awk '{print $1}'将为我服务
who|awk '{print $1}'
4c8rllxm7#
奇怪的是,系统确实区分了real and effective UIDs,但我找不到在shell级别导出这个的程序。
vwkv1x7d8#
在Rocky Linux 9.2中,我运行了这个脚本:
#!/bin/bash echo "LOGNAME: $LOGNAME" echo "SUDO_USER: $SUDO_USER" set | grep username
在这些情景中的每一个中:
./script.sh
sudo ./script.sh
使用if...then...else检查是可行的,除非您无意中在superuser提示符下运行了sudo脚本:
superuser
#root: sudo ./script.sh
但是,有一个set变量在我的所有场景中都是一致的:
set
MAIL=/var/spool/mail/username
我现在将登录用户设置为:
UNAME=$(echo $MAIL |cut -d/ -f5)
我相信有些情况下这是行不通的,但我还没有找到一个。
8条答案
按热度按时间axkjgtzd1#
如果您使用的是
sudo su -
,则$SUDO_USER不起作用。它还需要多次检查-如果
$USER == 'root'
,则得到$SUDO_USER
。使用
who am i
代替whoami
命令。这将运行为当前会话过滤的who
命令。它提供的信息比你需要的更多。所以,这样做只得到用户:或者(更简单),您可以使用
logname
。它的作用与上面的语句相同。这将为您提供登录到会话的用户名。
无论
sudo
还是sudo su [whatever]
,这些都可以工作。无论su
和sudo
被调用多少次,它都能正常工作。a7qyws3x2#
我认为$SUDO_USER是有效的。
uxhixvfz3#
以下是如何获取调用脚本的人的用户名,无论是否sudo:
或者更短的版本
nwwlzxa74#
使用
whoami
、who am i
、who
、id
或$SUDO_USER
在这里是不正确的。实际上,
who
永远不会解决这个问题,因为它只会列出登录的用户,这可能是几十个。在我看来,唯一有价值的答案就是使用
logname
。希望这个能帮上忙
罗伯
vsaztqbk5#
如果它是你正在寻找的UID(对docker恶作剧很有用),那么这个工作:
dphi5xsq6#
who am i | awk '{print $1}'
不适合我,但who|awk '{print $1}'
将为我服务4c8rllxm7#
奇怪的是,系统确实区分了real and effective UIDs,但我找不到在shell级别导出这个的程序。
vwkv1x7d8#
在Rocky Linux 9.2中,我运行了这个脚本:
在这些情景中的每一个中:
./script.sh
)sudo ./script.sh
)作为root用户./script.sh
)作为root用户./script.sh
)作为root用户使用if...then...else检查是可行的,除非您无意中在
superuser
提示符下运行了sudo
脚本:但是,有一个
set
变量在我的所有场景中都是一致的:我现在将登录用户设置为:
我相信有些情况下这是行不通的,但我还没有找到一个。