我如何得到当前用户的用户名在Bash?

如何在Bash中获得当前用户的用户名?我是否使用whoami?

618215 次浏览

在命令行中输入

whoami

echo "$USER"

对于BashKornShell (ksh), sh等。你的许多问题很快就会被回答:

man [function]

要获得您正在使用或通常更方便的系统的文档:

谷歌“man函数”

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

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

编写脚本:

myvar=$(whoami)

whoami的替代方法是id -u -n

id -u将返回用户id(例如,为0)。

我在Solaris 9和Linux上使用的一个黑客,它对它们都很好:

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

这个代码段打印带有当前EUID的用户名。

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

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

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

两个命令:

  1. id打印用户id和组。 李格式:uid=usernumber(username) ... < / p > < / >

  2. whoami给出当前用户名

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

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

它们可以被回应:

echo $SUDO_UID
echo $SUDO_USER

或指定的,例如:

myuid=$SUDO_UID
myuname=$SUDO_USER

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

Solaris操作系统中,我使用了这个命令:

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

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

$ whoami       # Without space

获取当前任务的user_struct

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

大多数 Linux系统上,只需在命令行上键入显示本用户信息即可提供用户ID。

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

echo $UID

一旦知道了UID,通过将UID与/etc/passwd文件匹配来找到用户。

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

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

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

内置的: (true的同义词)通过设置最后一个参数来代替临时变量,该参数存储在$_中。然后我们展开它(\u),就好像它是一个带有P操作符的提示字符串。

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

所有人,

从我在这里看到的所有答案都是错误的,特别是如果你进入了sudo模式,所有返回'root'而不是登录用户。答案是使用'who',找到eh 'tty1'用户并提取它。失业的“w"命令的工作原理相同,var=$SUDO_USER获取真正的登录用户。

干杯!

TBNK

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

...得到你的普通用户(如果非sudo) →或←普通用户当前sudo调用的背后

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

# !/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