我正在我的项目中运行一个脚本,我看到这个命令
su - `whoami`
我有几个基本问题:
- 这个命令有什么作用?
- whoami 命令之外的 `` 引号有什么意义?
- - 用来做什么?
我知道su
代表切换用户。
答案1
这反引号 ( ``
)是命令替换:它们被反引号内运行命令的结果替换。他们在这里运行whoami
,打印你的用户名。
这-
后su
使su
运行登录外壳:登录 shell 将从头开始读取某些环境配置等。默认情况下,它只会将用户的 shell 作为普通 shell 运行,这不会完成所有这些工作(请参阅链接)。
su
始终启动一个新的用户会话,重新验证用户身份,就像他们从头开始登录一样。任何来自外部的环境变量都会在内壳中被清除。
因此,这相当于命令(假设您在计算机上的用户名也是“ blunderboy
”):
su - blunderboy
这意味着“以 blunderboy 身份重新验证新会话并运行登录 shell”。
该命令的总体结果是像当前用户一样从头开始启动一个新会话。为什么要费力这样做呢?可能会发现 的一些副作用su
:特别是,因为它启动了一个新的用户会话,所以它会发现对用户所在组的任何更改,以及其他用户或权限更改,以及环境变量全部重置。通常,将用户添加到新组只有在再次登录后才会生效:su
计为为此目的再次登录,因此它启动的 shell 将使新组处于活动状态。
1 这是一种简化,但对于这个解释来说已经足够真实了。