我正在通过 shell 脚本执行一些操作。如果该脚本成功,则继续,否则注销当前用户。我无法找到注销当前用户的方法。我尝试使用 exit 但似乎它是从当前进程退出,而不是 shell。 PS:我无法使用 pkill 来终止当前用户的会话,因为有许多进程通过该用户运行,因为它是通用用户。此外,由于这是一个通用用户,因此多个其他团队成员可能会通过该用户登录到系统,这也可能会终止他们的会话。
答案1
如果该脚本与您运行它时使用的 shell 相同,您可以直接使用source
它,而不是将其作为新进程运行,然后exit
应该成功注销您。
即代替./script.sh
你做source ./script.sh
。造成这种差异的原因是 source 是一个 shell 内置命令,它使您当前的 shell 执行文件中的命令,如果您在没有 source 的情况下运行脚本,则会创建一个新进程来执行它,这就是为什么退出它不会退出您的壳。
答案2
alias exit='./your_script && exit'
答案3
首先,在开始回答之前,让我们先澄清一些基础知识
AFAIK
- 一台终端只能有一个登录 shell,但多个用户可以使用具有非登录 shell 的同一终端。
- 此登录 shell 可以是 TTY 或 PTS(tty 和 pts 之间的区别)
- 登录 shell 可以有其他非登录 shell (什么是登录/非登录 shell)
exit
用于从非登录 shell 退出(不能logout
从非登录 shell 退出)logout
用于退出 TTY(logout
只能与 login-shell 一起使用)- 如何检查您是在登录终端还是非登录终端
如果您使用 TTY
(./your_script && <task_you want_to_continue>) || logout
或者
(./your_script && <task_you want_to_continue>) || exit
如果您在 PTS
(./your_script && <task_you want_to_continue>) || who -u;
echo 'enter PID of login shell user you want to logout'; read PID; kill $PID;
删除“<”和“>”标签并将您的任务放入上述脚本中。
我不知道为什么logout
,并且exit
在 PTS 上工作不像在 TTY 上那样工作,但我希望这能解决您的问题。
我已经使用 Linux 大约 4 个月了,所以按照这个标准我应该被称为新手。如果您发现任何错误,我们将不胜感激对答案的任何改进。
答案4
尝试这个命令:
killall gnome-session