437

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

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

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

4

14 回答 14

634

在命令行中,输入

whoami

或者

echo "$USER"

要将这些值保存到变量中,请执行

myvariable=$(whoami)

或者

myvariable=$USER

当然,您不需要创建变量,因为这就是$USER变量的用途。

于 2013-10-10T21:49:00.500 回答
102

的替代方案whoamiid -u -n

id -u将返回用户 ID(例如 0 代表root)。

于 2014-05-29T10:34:38.007 回答
35

使用标准的 Unix/Linux/BSD/MacOS 命令logname来检索登录的用户。这忽略了环境以及 sudo,因为这些是不可靠的记者。它将始终打印登录用户的名称,然后退出。这个命令大约在 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
于 2017-02-15T19:55:23.927 回答
18

我在Solaris 9 和 Linux 上使用过的 hack,对它们都适用:

ps -o user= -p $$ | awk '{print $1}'

此代码段使用当前 EUID 打印用户的名称。

注意:这里需要 Bash 作为解释器。

在 Solaris 上,您遇到的方法有问题,如上所述:

  • id不接受-uand-n参数(所以你必须解析输出)
  • whoami不存在(默认)
  • who am I打印当前终端的所有者(忽略 EUID)
  • $USER只有在读取配置文件后才能正确设置变量(例如,/etc/profile
于 2014-08-04T11:51:06.633 回答
12

两个命令:

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

  2. whoami给出当前用户名

于 2015-12-29T19:37:31.163 回答
10

当需要 root (sudo) 权限时,通常是 90%+ 使用脚本时,以前答案中的方法总是给你root答案。

获取当前“登录”用户同样简单,但需要访问不同的变量:$SUDO_UID$SUDO_USER.

它们可以被回显:

echo $SUDO_UID
echo $SUDO_USER

或分配,例如:

myuid=$SUDO_UID
myuname=$SUDO_USER
于 2016-08-28T13:25:00.940 回答
6

Solaris OS 中,我使用了以下命令:

$ who am i     # Remember to use it with space.

在 Linux 上——有人已经在评论中回答了这个问题。

$ whoami       # Without space
于 2017-03-29T18:49:29.127 回答
4

对于BashKornShell ( ksh)sh等。您的许多问题都可以通过以下任一方式快速回答:

man [function]

要获取您正在使用的系统的文档,或者通常更方便地获取文档:

谷歌“人功能”

对于 Linux 和 Unix 有适度差异的某些事情,这可能会给出不同的结果。

对于这个问题,只需在你的 shell 中输入“whoami”。

编写脚本:

myvar=$(whoami)
于 2013-10-10T21:51:03.297 回答
4

当前用户的用户名可以在纯 Bash 中通过${parameter@operator}参数扩展(在 Bash 4.4 中引入)得到:

$ : \\u
$ printf '%s\n' "${_@P}"

通过设置存储:在. 然后我们将它展开 ( ),就好像它是一个带有操作符的提示字符串。true$_\uP

这比使用 更好$USER,因为$USER它只是一个常规环境变量;它可以被修改、取消设置等。即使它不是故意篡改的,它仍然不正确的常见情况是当用户在没有启动登录 shellsu的情况下切换(默认)。

于 2019-01-19T08:06:39.657 回答
4
于 2021-04-18T18:02:48.487 回答
2

大多数Linux 系统上,只需在命令行中键入whoami即可提供用户 ID。

但是,在 Solaris 上,您可能必须通过以下命令确定登录用户的 UID 来确定用户 ID。

echo $UID

知道 UID 后,通过将 UID 与/etc/passwd文件进行匹配来查找用户。

cat /etc/passwd | cut -d":" -f1,3
于 2018-02-03T01:16:21.230 回答
1

这是我为将代码推送到我的个人 gitlab 而制作的一个简单的小示例 bash 脚本,它在我的提交消息中吐出我当前的用户名。

# !/bin/sh
# This example script is for pushing my code to gitlab 
echo Starting Push for user :  $(whoami), Please enter Commit Message 
below: 
read varMessage  
# this prompts the user for an input messsage , then saves the result in 
# a variable 
git add . 
git commit -m "$(whoami): $varMessage" 
git push -u "url_of_project" master

我个人 gitlab 中的结果提交消息如下所示:-

walexia : updated Matplotib example
于 2021-07-02T18:30:50.960 回答
0

全部,

从我在这里看到的所有答案都是错误的,尤其是当您进入 sudo 模式时,所有答案都返回“root”而不是登录用户。答案是使用'who'并找到eh'tty1'用户并提取它。Thw "w" 命令的工作原理相同,并且 var=$SUDO_USER 获取真正的登录用户。

干杯!

TBNK

于 2020-06-22T19:23:33.953 回答
-5

获取当前任务的 user_struct

#define get_current_user()              \
({                                      \
    struct user_struct *__u;            \
    const struct cred *__cred;          \
    __cred = current_cred();            \
    __u = get_uid(__cred->user);        \
    __u;                                \
})
于 2017-11-06T13:48:36.127 回答