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

我通过SSH登录到Debian 7,而不是root 。 写sudo的时候总是开销太多了,我做了sudo su 。 由于Debian默认shell( dash ?)不支持Tab键来完成文件名,我运行/bin/bash 。 我为.bash_aliases添加了一些别名并激活它们,我再次运行/bin/bash (可能再多次),直到我得到所有别名。

在做了一些更多的系统设置之后,我再也记不起有多少次我必须输入exit才能回到开头而不是从SSH注销。

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

  1. 什么exit将退出,所以我至少可以在每次输入之前检查
  2. 在用户完全注销之前我可以exit多少次

我试过man exit但似乎没有手册可用。 help exit也不是很多。

我首先想到我可以使用pstree找到一个可能的解决方案,但恕我直言,它经常列出sshdsudo su缺失。

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

您可以使用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 $SHLVL次。


dash不支持SHLVL ,因此无论何时进入图片,图形都会出错。 但是, dash不是Ubuntu上任何可用帐户的登录shell,而SHLVL适用于更高级的shell,如bashzsh


我无法重现你失踪的sudo su

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

您可以简单地使用没有参数的命令ps 。 这里我有3个嵌套的bashes,所以有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