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