如何在Bash中获得当前用户的用户名?我用whoami吗?
当前回答
当需要root (sudo)权限时,在使用脚本时通常是90%以上,前面答案中的方法总是将root作为答案。
获取当前“登录”用户同样简单,但需要访问不同的变量:$SUDO_UID和$SUDO_USER。
它们可以被回应:
echo $SUDO_UID
echo $SUDO_USER
或指定的,例如:
myuid=$SUDO_UID
myuname=$SUDO_USER
其他回答
两个命令:
Id打印用户Id和组。 格式:uid=usernumber(用户名)… Whoami给出当前用户名
获取当前任务的user_struct
#define get_current_user() \
({ \
struct user_struct *__u; \
const struct cred *__cred; \
__cred = current_cred(); \
__u = get_uid(__cred->user); \
__u; \
})
All,
从我在这里看到的所有答案都是错误的,特别是如果你进入了sudo模式,所有返回'root'而不是登录用户。答案是使用'who',找到eh 'tty1'用户并提取它。“w”命令的工作原理相同,var=$SUDO_USER获得真正的登录用户。
干杯!
TBNK
当前用户的用户名可以在纯Bash中通过${parameter@operator}参数展开(在Bash 4.4中引入)获得:
$ : \\u
$ printf '%s\n' "${_@P}"
内置(true的同义词)通过设置最后一个参数来代替临时变量,该参数存储在$_中。然后我们展开它(\u),就好像它是一个带有P操作符的提示字符串。
这比使用$USER更好,因为$USER只是一个常规的环境变量;它可以被修改、取消设置等。即使它没有被故意篡改,一种常见的情况是,当用户在没有启动登录shell (su的默认)的情况下切换时,它仍然是不正确的。
我在Solaris 9和Linux上使用的一种hack,它对这两种系统都很有效:
ps -o user= -p $$ | awk '{print $1}'
这个代码段打印带有当前EUID的用户名。
注意:这里需要Bash作为解释器。
在Solaris上,您会遇到上述方法的问题:
Id不接受-u和-n参数(因此必须解析输出) Whoami不存在(默认情况下) 我是谁打印当前终端的所有者(忽略EUID) $USER变量只有在读取配置文件(例如/etc/profile)后才能正确设置。