我可以多久输入一次 exit 而不退出?

我可以多久输入一次 exit 而不退出?

我通过 SSH 登录 Debian 7,而不是。当一直root写入变得太过耗时时,我这样做了。由于 Debian 默认 shell ( ?) 不支持使用键来完成文件名,因此我运行了。我为 和 添加了一些别名以激活它们,我再次运行(可能多运行了几次)直到我得到所有正确的别名。sudosudo sudashTab/bin/bash.bash_aliases/bin/bash

在完成更多系统设置后,我已经记不清要输入多少次exit才能回到开始,而不是从 SSH 中注销。

其实这不是什么大问题,因为我可以再次通过 SSH 登录,所以这更像是一个学术问题。我想知道是否有办法找出答案

  1. 到底会退出什么exit,这样我至少可以在每次输入之前检查一下
  2. 我可以重复多少次exit才能让用户完全退出

我试过了man exit,但似乎没有可用的手册。help exit也没有告诉我们太多信息。

我首先想到的是,我可以使用找到一个可能的解决方案pstree,但恕我直言,它列出的sshd太频繁并且sudo su缺失。

:~$ pstree | grep ssh
     |-sshd---sshd---sshd---sh---bash---bash-+-grep

答案1

您可以使用SHLVL变量来确定您嵌套在登录进程启动的 shell 中的程度:

$ echo $SHLVL 
1
$ bash
$ echo $SHLVL 
2
$ bash
$ echo $SHLVL 
3
$ sudo su -            # Start a login shell, clears $SHLVL
# echo $SHLVL 
1
# logout
$ sudo su
# echo $SHLVL 
4
# bash
# echo $SHLVL 
5

由于登录 shell 从su -清除SHLVL,因此它具有SHLVL=1。要退出 shell 祖先中最近的此类登录 shell,您必须使用exit $SHLVLtimes。


SHLVL不受 的支持dash,因此每当它进入图片时,图形都会出错。但是,dash不是 Ubuntu 上任何可用帐户的登录 shell,并且SHLVL适用于bash和等更高级的 shell zsh


我无法重现你的缺失sudo su

$ pstree -ps $$
init(1)───sshd(1404)───sshd(12614)───sshd(12673)───zsh(12674)───sudo(31012)───su(31014)───bash(31016)───pstree(31084)

答案2

ps您可以直接使用不带参数的命令。这里我有 3 个嵌套的 bash,因此需要输入 3 个退出命令:

~ $ ps
  PID TTY          TIME CMD
 1986 pts/2    00:00:10 bash
31351 pts/2    00:00:00 bash
31399 pts/2    00:00:00 bash
31450 pts/2    00:00:00 ps

相关内容