通过 shell 脚本注销

通过 shell 脚本注销

我正在通过 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

  1. 一台终端只能有一个登录 shell,但多个用户可以使用具有非登录 shell 的同一终端。
  2. 此登录 shell 可以是 TTY 或 PTS(tty 和 pts 之间的区别
  3. 登录 shell 可以有其他非登录 shell (什么是登录/非登录 shell
  4. exit用于从非登录 shell 退出(不能logout从非登录 shell 退出)
  5. logout用于退出 TTY(logout只能与 login-shell 一起使用)
  6. 如何检查您是在登录终端还是非登录终端

如果您使用 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

相关内容