man whoami
通常是检查文档的一个很好的第一站。
man whoami
通常是检查文档的一个很好的第一站。
Answers:
在命令行上,输入
whoami
要么
echo "$USER"
要将这些值保存到变量,请执行
myvariable=$(whoami)
要么
myvariable=$USER
当然,您不需要创建变量,因为这就是$USER
变量的用途。
$USER
根本没有设置。更糟糕的是,它只是一个环境变量,因此用户可以覆盖它:USER=thisisnotmyname bash -c 'echo $USER' # prints thisisnotmyname
whoami
(按照您的建议)可以完全消除问题,前提是假定覆盖的环境变量是您上下文中的潜在问题。
的替代品whoami
是id -u -n
。
id -u
将返回用户ID(例如root的 0 )。
"${USER}"
并whoami
都取决于你如何登录。具体来说,登录shell和须藤将设置$ USER,并whoami
在连接到标准输入用户期待。但是,如果您从cron运行批处理作业,或者以不同于root的用户身份运行启动脚本,则这些脚本将输出错误的用户(root)或完全不输出。无论通过查看进程的用户ID,此答案都将返回正确的值。
-n
参数将打印用户名,就像询问的原始问题一样。请参阅以下内容:id -u -n
印刷品brett
-甚至在达尔文上。
我在Solaris 9和Linux 上使用过的一种技巧,对两者都适用:
ps -o user= -p $$ | awk '{print $1}'
此代码段显示具有当前EUID的用户名。
注意:您需要Bash作为此处的解释器。
在Solaris上,上述方法存在问题:
id
不接受-u
和-n
参数(因此您必须解析输出)whoami
不存在(默认情况下)who am I
打印当前终端的所有者(忽略EUID)$USER
仅在读取配置文件(例如/etc/profile
)后才能正确设置变量ps
命令是显示当前shell的pid所有者所需的所有命令。
command -p id
(从POSIX shell)或/usr/xpg4/bin/id
。更一般而言,在Solaris上,您希望修改环境以将自己置于POSIX环境中(使用诸如PATH=
getconf PATH`之类的东西,并确保运行/usr/xpg4/bin/sh
)以避免被70年代/ 80年代的命令所困扰。
两个命令:
id
显示用户ID和组。格式:uid=usernumber(username) ...
whoami
给出当前的用户名
获取当前任务的user_struct
#define get_current_user() \
({ \
struct user_struct *__u; \
const struct cred *__cred; \
__cred = current_cred(); \
__u = get_uid(__cred->user); \
__u; \
})