我通过 SSH 登录 Debian 7,而不是。当一直root
写入变得太过耗时时,我这样做了。由于 Debian 默认 shell ( ?) 不支持使用键来完成文件名,因此我运行了。我为 和 添加了一些别名以激活它们,我再次运行(可能多运行了几次)直到我得到所有正确的别名。sudo
sudo su
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
答案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
$SHLVL
times。
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