如何在Bash中获取当前用户的用户名?我使用whoami
命令吗?
whoami
命令可以获取当前用户的用户名。在命令行中输入
whoami
或者echo "$USER"
$USER
可能根本没有设置。更糟糕的是,它只是一个环境变量,所以用户可以覆盖它:USER=thisisnotmyname bash -c 'echo $USER' # 输出 thisisnotmyname
。 - sitaktifwhoami
(正如你所建议的)能够彻底消除这个问题,假设在你的环境中覆盖环境变量是一个潜在的问题。 - sitaktif一个替代 whoami
的命令是 id -u -n
。
id -u
命令将返回用户的ID(例如,root 用户的ID 为 0)。
${USER}
和whoami
都依赖于您如何登录。特别是,登录shell和sudo将设置$USER,而whoami
查看附加到标准输入流的用户。但是,如果您从cron运行批处理作业,或者以不同于root的用户身份运行启动脚本,则它们将输出错误的用户(root)或根本不输出任何内容。通过查看进程的用户ID,这个答案将返回正确的值。 - Asfand Qazi-n
参数会像原始问题所要求的那样打印用户名。请参见以下内容:id -u -n
输出brett
- 即使在Darwin上也是如此。 - Brettwhoami
命令。 - Joshua Schlichting使用标准的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
command -p id
(从POSIX shell)或/usr/xpg4/bin/id
。更一般地,在Solaris上,您需要修改环境以将自己置于POSIX环境中(例如使用PATH=
getconf PATH之类的东西,并确保运行
/usr/xpg4/bin/sh`),以避免被困在70年代/80年代的命令中。 - Stephane Chazelas两个命令:
id
打印出用户id以及所属的组。
格式:uid=用户号(用户名) ...
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.
$ whoami # Without space
REALUSER="${SUDO_USER:-${USER}}"
...让你获得普通用户(如果非sudo) → 或 ← 在当前sudo调用背后的普通用户。
${SUDO_USER:-$USER}
。或者使用 whoami ${SUDO_USER:-$(whoami)}
。 - Alex_Mmy_var="$('/some/path/to/${USER}/more/path' 'and/something/else')"
. - SumNeuron可以使用纯Bash的${parameter@operator}
参数扩展(在Bash 4.4中引入)来获取当前用户的用户名:
$ : \\u
$ printf '%s\n' "${_@P}"
:
内置命令(与true
同义)可通过设置最后一个参数并将其存储在$_
中来代替临时变量。然后,我们使用P
运算符将其(\u
)展开为提示字符串。
这比使用$USER
更好,因为$USER
只是一个常规环境变量;它可以被修改、取消设置等。即使没有故意篡改,一个常见的情况也可能出现错误,那就是用户在未启动登录shell(su
的默认设置)的情况下进行了切换。