我多久可以输入退出而不退出?
我通过SSH登录到Debian 7,而不是root
。 写sudo
的时候总是开销太多了,我做了sudo su
。 由于Debian默认shell( dash
?)不支持Tab键来完成文件名,我运行/bin/bash
。 我为.bash_aliases
添加了一些别名并激活它们,我再次运行/bin/bash
(可能再多次),直到我得到所有别名。
在做了一些更多的系统设置之后,我再也记不起有多少次我必须输入exit
才能回到开头而不是从SSH注销。
实际上这不是什么大问题,因为我可以再次通过SSH登录,所以这更像是一个学术问题。 我想知道是否有办法找出答案
- 什么
exit
将退出,所以我至少可以在每次输入之前检查 - 在用户完全注销之前我可以
exit
多少次
我试过man exit
但似乎没有手册可用。 help exit
也不是很多。
我首先想到我可以使用pstree
找到一个可能的解决方案,但恕我直言,它经常列出sshd
而sudo 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,如bash
和zsh
。
我无法重现你失踪的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