我正在用 Bash 编写一个需要获取用户用户名的程序。
我听说过一个叫做 的东西whoami
,但我不知道它的作用或如何使用它。
我使用什么命令来获取当前用户名?
在命令行中,输入
whoami
或者
echo "$USER"
要将这些值保存到变量中,请执行
myvariable=$(whoami)
或者
myvariable=$USER
当然,您不需要创建变量,因为这就是$USER
变量的用途。
的替代方案whoami
是id -u -n
。
id -u
将返回用户 ID(例如 0 代表root)。
使用标准的 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
两个命令:
id
打印用户 ID 和组。格式:uid=usernumber(username) ...
whoami
给出当前用户名
当需要 root (sudo) 权限时,通常是 90%+ 使用脚本时,以前答案中的方法总是给你root
答案。
获取当前“登录”用户同样简单,但需要访问不同的变量:$SUDO_UID
和$SUDO_USER
.
它们可以被回显:
echo $SUDO_UID
echo $SUDO_USER
或分配,例如:
myuid=$SUDO_UID
myuname=$SUDO_USER
在Solaris OS 中,我使用了以下命令:
$ who am i # Remember to use it with space.
在 Linux 上——有人已经在评论中回答了这个问题。
$ whoami # Without space
当前用户的用户名可以在纯 Bash 中通过${parameter@operator}
参数扩展(在 Bash 4.4 中引入)得到:
$ : \\u
$ printf '%s\n' "${_@P}"
通过设置存储:
在. 然后我们将它展开 ( ),就好像它是一个带有操作符的提示字符串。true
$_
\u
P
这比使用 更好$USER
,因为$USER
它只是一个常规环境变量;它可以被修改、取消设置等。即使它不是故意篡改的,它仍然不正确的常见情况是当用户在没有启动登录 shellsu
的情况下切换(默认)。
在大多数Linux 系统上,只需在命令行中键入whoami即可提供用户 ID。
但是,在 Solaris 上,您可能必须通过以下命令确定登录用户的 UID 来确定用户 ID。
echo $UID
知道 UID 后,通过将 UID 与/etc/passwd
文件进行匹配来查找用户。
cat /etc/passwd | cut -d":" -f1,3
这是我为将代码推送到我的个人 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
全部,
从我在这里看到的所有答案都是错误的,尤其是当您进入 sudo 模式时,所有答案都返回“root”而不是登录用户。答案是使用'who'并找到eh'tty1'用户并提取它。Thw "w" 命令的工作原理相同,并且 var=$SUDO_USER 获取真正的登录用户。
干杯!
TBNK
获取当前任务的 user_struct
#define get_current_user() \
({ \
struct user_struct *__u; \
const struct cred *__cred; \
__cred = current_cred(); \
__u = get_uid(__cred->user); \
__u; \
})