在“su”没有显示新用户 ID 之后,“我是谁”?

use*_*856 10 su whoami

为什么当我切换用户su <username>然后执行时who am i输出的是我之前登录的用户而不是我切换到的用户?

ckh*_*han 14

您可能运行了错误的命令。

我想您可能已经who am i在终端上按字面键入了,它运行时who带有两个被忽略的参数 ( am, i)。

查看man whoman whoami了解更多详情。

  • 两个参数 `am` 和 `i` 没有被忽略,它们甚至由 POSIX 指定:“在 POSIX 语言环境中,将输出限制为描述调用用户,相当于 `-m` 选项。” (2认同)

Tho*_*oot 6

解决方法

\n\n
ls -l `tty` | awk \'{print $3}\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

可以作为 的替代品who am i | awk \'{print $1}\'。解释如下:

\n\n

在许多系统上“ who am i”等同于“ who -m”。\n这里的问题是,对于某些终端,“ who -m”不返回任何内容!

\n\n

示例 #1 从 xfce4 终端运行

\n\n
Pegasus ~ # whoami\nroot\nPegasus ~ # who am i\nthomas   pts/1        2017-08-19 11:15 (:0.0)\nPegasus ~ # who -m\nthomas   pts/1        2017-08-19 11:15 (:0.0)\nPegasus ~ # who\nthomas   tty8         2017-08-19 10:18 (:0)\nthomas   pts/1        2017-08-19 11:15 (:0.0)\nthomas   pts/5        2017-08-19 16:16 (:0.0)\nPegasus ~ # who am i | awk \'{print $1}\'\nthomas\nPegasus ~ # \n
Run Code Online (Sandbox Code Playgroud)\n\n

但是\n来自 gnome 终端的示例#2(同一台计算机,相同的命令)

\n\n
Pegasus ~ # whoami\nroot\nPegasus ~ # who am i\nPegasus ~ # who -m\nPegasus ~ # who\nthomas   tty8         2017-08-19 10:18 (:0)\nthomas   pts/1        2017-08-19 11:15 (:0.0)\nthomas   pts/5        2017-08-19 16:16 (:0.0)\nPegasus ~ # \n
Run Code Online (Sandbox Code Playgroud)\n\n

这似乎是 gnome-terminal 未添加 utmp 条目\xe2\x80\xa6 的结果

\n


Mar*_*ers 5

根据我的 Ubuntu 12.04.2 手册页中的“who”命令,“who am i”(或带有任意两个参数的 who)与“who -m”相同,并且应该为您提供与 STDIN 关联的主机名和用户。但是我没有得到“我是谁”的输出。手册页错误或命令有错误。无论如何,正如 ckhan 之前回答的那样,“whoami”命令将为您提供有效用户 ID 的用户名。至少在 Ubuntu 12.04.2 中,id、'who am i' 或 'whoami' 都不会只提供当前终端登录者的用户名。作为解决方法,您可以通过以下方式获得:

who | sed 's/ .*//'
Run Code Online (Sandbox Code Playgroud)