如何检查是否退出回到ps终端?

问题描述 投票:0回答:1

这个问题听起来可能有点奇怪。

情况如下:

  • 我在powershell控制台中执行命令“wsl”。我的默认 发行版启动或恢复。
  • 我执行一些命令,如果我需要root权限,我切换到“sudo -i"。然后我退出并返回到上一个用户。如果我再退出一次(可能是意外),我将返回到 powershell 环境。或者我 甚至意外地完全退出控制台。这种行为我不 喜欢,但这不是重点。

现在我想以某种方式记录我离开 Linux 中的最后一个会话的时间。我尝试了另一种方法,在 wsl.conf:

中添加命令
command=touch /tmp/test.xyz

不幸的是,这没有帮助,因为该命令显然只在“wsl --shutdown”之后运行一次(至少我这么认为)。 我的想法是在我的脚本完成后删除临时文件;像开关一样使用它。

现在我的新想法是使用“bash_logout”脚本。但我不知道如何检查当前用户是否是第一个(或者如果我退出当前用户则为最后一个)。 命令如

w
who
users

似乎只显示当前用户,没有任何“继承”。

还有类似的东西

exit & su

似乎不起作用。

那么如果我退出的话,如何检查当前的控制台会话是否是最后一个会话?

也许我遗漏了一些明显的东西,如果是这样,我很抱歉。我尝试让 Linux 变得更好。

linux windows console user-controls wsl-2
1个回答
0
投票

如果您想要一种编程方式进行检查,请尝试检查以下内容的输出:

echo -e "User: $USER\nSUDO_USER: $SUDO_USER\nLOGNAME: $LOGNAME\nlogname: $(logname)"

从您自己的用户开始,然后通过 sudo 和 su 等进行更改,具体取决于 Linux 发行版、sudo 版本以及可能的 shell(bash、zsh 等),您可能会得到与我不同的结果。我还观察到 SUDO_USER 在某些较旧的服务器发行版上未填充。


在最近的发行版上产生了:

如果 thedude 作为第一个用户登录: SUDO_USER 环境变量为空; USERLOGNAME 环境变量的值为

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
© www.soinside.com 2019 - 2024. All rights reserved.