这个问题听起来可能有点奇怪。
情况如下:
现在我想以某种方式记录我离开 Linux 中的最后一个会话的时间。我尝试了另一种方法,在 wsl.conf:
中添加命令command=touch /tmp/test.xyz
不幸的是,这没有帮助,因为该命令显然只在“wsl --shutdown”之后运行一次(至少我这么认为)。 我的想法是在我的脚本完成后删除临时文件;像开关一样使用它。
现在我的新想法是使用“bash_logout”脚本。但我不知道如何检查当前用户是否是第一个(或者如果我退出当前用户则为最后一个)。 命令如
w
who
users
似乎只显示当前用户,没有任何“继承”。
还有类似的东西
exit & su
似乎不起作用。
也许我遗漏了一些明显的东西,如果是这样,我很抱歉。我尝试让 Linux 变得更好。
如果您想要一种编程方式进行检查,请尝试检查以下内容的输出:
echo -e "User: $USER\nSUDO_USER: $SUDO_USER\nLOGNAME: $LOGNAME\nlogname: $(logname)"
从您自己的用户开始,然后通过 sudo 和 su 等进行更改,具体取决于 Linux 发行版、sudo 版本以及可能的 shell(bash、zsh 等),您可能会得到与我不同的结果。我还观察到 SUDO_USER 在某些较旧的服务器发行版上未填充。
在最近的发行版上产生了:
如果 thedude 作为第一个用户登录: SUDO_USER 环境变量为空; USER 和 LOGNAME 环境变量的值为
thedude
; logname
命令输出为 thedude
:
User: thedude
SUDO_USER:
LOGNAME: thedude
logname: thedude
如果 thedude 然后使用
sudo -i
更改为 root:
User: root
SUDO_USER: thedude
LOGNAME: root
logname: thedude
然后从 root 使用
su walter
变成 walter:
User: walter
SUDO_USER: thedude
LOGNAME: walter
logname: thedude
但如果它不是
su walter
,则 sudo su walter
会变成 walter,堆叠第二个 sudo
命令 SUDO_USER 会被 root
覆盖,但 logname
仍然具有 thedude
的值,显示是第一次登录:
User: walter
SUDO_USER: root
LOGNAME: walter
logname: thedude
我将 etckeeper 项目与
.bash_logout
一起使用,以在任何时候 /etc
已被更改且提交消息为: 时强制提交:
Session exit commit:
* User: $USER
* SUDO_USER: $SUDO_USER
* LOGNAME: $LOGNAME
* logname: $(logname)
但对你来说,这可能是这样的比较:
if [[ ${USER} = ${LOGNAME} ]] && [[ ${USER} = $(logname) ]]; then
# First user and last to logout of host. Do something.
touch /tmp/test.xyz
fi