在bash中获取当前用户的用户名?

我正在编写一个程序,需要获取用户的用户名。

我听说过一个叫做whoami的东西,但是我不知道它在做什么或者如何使用它。

我用什么命令来获取当前用户名?

在命令行中input

 echo $USER 

要么

 whoami 

要将这些值保存到variables,请执行

 myvariable=$(whoami) 

要么

 myvariable=$USER 

当然,您不需要创build一个variables,因为这是$USERvariables的用途。

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)
  • $USERvariables只有在读取configuration文件(例如/etc/profile )后才能正确设置。

两个命令:

  1. id打印用户ID与组。 格式: uid=usernumber(username) ...

  2. 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; \})