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

时间:2013-10-10 21:43:58

标签: bash username

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

我听说过一个名为whoami的东西,但我不知道它做了什么或如何使用它。

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

14 个答案:

答案 0 :(得分:355)

在命令行中输入

echo "$USER"

whoami

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

myvariable=$(whoami)

myvariable=$USER

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

答案 1 :(得分:62)

替代whoamiid -u -n

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

答案 2 :(得分:16)

我在Solaris 9和Linux上使用的hack,它适用于两者:

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

此代码段打印具有当前EUID的用户名。

注意:你需要bash作为解释器。

在Solaris上,您遇到了上述方法的问题:

  • id不接受-u-n参数(因此您必须解析输出)
  • whoami不存在(默认情况下)
  • who am I打印当前终端的所有者(忽略EUID)
  • 只有在阅读个人资料文件(例如$USER)后才能正确设置
  • /etc/profile变量

答案 3 :(得分:13)

使用标准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

答案 4 :(得分:11)

两个命令:

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

  2. whoami提供当前用户名

答案 5 :(得分:6)

当需要root(sudo)权限时,使用脚本时通常为90%+,上述方法总是以root为答案。

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

他们可以回应:

echo $SUDO_UID
echo $SUDO_USER

或指定,例如:

myuid=$SUDO_UID
myuname=$SUDO_USER

答案 6 :(得分:5)

对于bash/ksh/sh等。您的许多问题都可以通过以下方式快速回答:

man [function]

获取您正在使用的系统的文档。

或通常更方便: 谷歌“男人的功能” 对于linux和unix存在适度差异的一些事情,这可能会给出不同的结果。

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

编写脚本:

myvar=$(whoami)

答案 7 :(得分:5)

在Solaris OS中 - 我使用了这个命令。

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

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

$ whoami       # without space

答案 8 :(得分:1)

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

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

通过设置存储在:中的最后一个参数,使用内置的true$_的同义词)代替临时变量。然后,我们将其扩展为\u的提示字符串,将其扩展为P

这比使用$USER更好,因为$USER只是一个常规的环境变量;可以对其进行修改,取消设置等。即使不加以故意篡改,通常仍然不正确的情况是用户在没有启动登录Shell的情况下进行了切换(默认为su)。

答案 9 :(得分:1)

全部

从我看到的这里,所有答案都是错误的,特别是如果您进入sudo模式,并且所有答案都返回“ root”而不是登录用户。答案是使用“谁”并找到eh“ tty1”用户并提取出来。 “ w”命令的工作原理相同,并且var = $ SUDO_USER获取实际登录的用户。

干杯!

TBNK

答案 10 :(得分:1)

REALUSER="${SUDO_USER:-${USER}}"

...让您成为普通用户(如果不是 sudo)→ 或 ← 普通用户 在当前 sudo 调用之后

答案 11 :(得分:0)

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

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

echo $UID

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

cat /etc/passwd | cut -d":" -f1,3

答案 12 :(得分:0)

这是我为将我的代码推送到我的个人 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

答案 13 :(得分:-4)

获取当前任务的user_struct

#define get_current_user()              \
({                                      \
    struct user_struct *__u;            \
    const struct cred *__cred;          \
    __cred = current_cred();            \
    __u = get_uid(__cred->user);        \
    __u;                                \
})