在bash中获取当前用户的用户名?
我正在编写一个程序,需要获取用户的用户名。
我听说过一个叫做whoami
的东西,但是我不知道它在做什么或者如何使用它。
我用什么命令来获取当前用户名?
在命令行中input
echo $USER
要么
whoami
要将这些值保存到variables,请执行
myvariable=$(whoami)
要么
myvariable=$USER
当然,您不需要创build一个variables,因为这是$USER
variables的用途。
whoami
替代是id -u -n
。
id -u
将返回用户标识(例如,0代表root)。
我已经在Solaris 9和Linux上使用了一种黑客技术,并且两者都可以正常工作:
ps -o user= -p $$ | awk '{print $1}'
这个片段用当前的EUID打印用户的名字。
注意:在这里你需要bash作为解释器。
在Solaris上,您有上述方法的问题:
-
id
不接受-u
和-n
参数(所以你将不得不parsing输出) -
whoami
不存在(默认情况下) -
who am I
打印当前terminal的所有者(忽略EUID) -
$USER
variables只有在读取configuration文件(例如/etc/profile
)后才能正确设置。
两个命令:
-
id
打印用户ID与组。 格式:uid=usernumber(username) ...
-
whoami
给出当前的用户名
对于bash/ksh/sh
等你的很多问题都可以通过以下两种方法快速回答:
man [function]
获取正在使用的系统的文档。
或通常更方便:谷歌“人function”这可能会给一些东西,在Linux和Unix有适度的差异的结果不同。
对于这个问题,只需在shell中input“whoami”即可。
编写脚本:
myvar=$(whoami)
当需要root(sudo)权限的时候,使用脚本的时候通常是90%以上,上面的方法总是给你root
的答案。
获取当前的“login”用户同样简单,但需要访问不同的variables: $SUDO_UID
和$SUDO_USER
。
他们可以得到回应:
echo $SUDO_UID echo $SUDO_USER
或分配,例如:
myuid=$SUDO_UID myuname=$SUDO_USER
使用标准的Unix / Linux / BSD / MacOS命令日志名来检索login的用户。 这和环境无关,因为这些都是不可靠的记者。 它将始终打印login的用户名,然后退出。 这个命令自1981年以来就已经出现了。
My-Mac:~ devin$ logname devin My-Mac:~ devin$ sudo logname Password: devin My-Mac:~ devin$ sudo su - My-Mac:~ root# logname devin My-Mac:~ root# echo $USER root
在Solaris OS中,我使用了这个命令。
我是谁 – 记得用空间。
在Linux上 – 有人已经详细解答了。
whoami —–没有空间
获取当前任务的user_struct
定义get_current_user()\
({\ struct user_struct * __ u; \ const struct cred * __ cred; \ __cred = current_cred(); \ __u = get_uid(__ cred-> user); \ __u; \})