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; \
})