我正在用bash编写一个需要获取用户用户名的程序。
我听说过一个名为whoami
的东西,但我不知道它做了什么或如何使用它。
我使用什么命令来获取当前用户名?
答案 0 :(得分:355)
在命令行中输入
echo "$USER"
或
whoami
要将这些值保存到变量,请执行
myvariable=$(whoami)
或
myvariable=$USER
当然,您不需要创建变量,因为这是$USER
变量的用途。
答案 1 :(得分:62)
替代whoami
是id -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)
两个命令:
id
打印用户ID和组。
格式:uid=usernumber(username) ...
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; \
})