Com que frequência posso digitar exit sem efetuar logout?

2

Eu entrei no Debian 7 via SSH, não como root . Ao escrever sudo todo o tempo se tornou muito sobrecarga, eu fiz sudo su . Como o shell padrão do Debian ( dash ?) Não suporta a tecla Tab para completar nomes de arquivos, executei /bin/bash . Adicionei alguns aliases a .bash_aliases e, para ativá-los, executei /bin/bash novamente (possivelmente mais algumas vezes) até obter todos os aliases corretos.

Depois de fazer mais algumas configurações do sistema, eu não consigo mais lembrar quantas vezes eu tenho que digitar exit para voltar ao início, mas não sair do SSH.

Na verdade, isso não é grande coisa, já que eu poderia fazer login via SSH novamente, então isso é mais uma questão acadêmica. Eu me perguntei se há uma maneira de descobrir

  1. exatamente o que exit sairá, para que eu possa verificar cada vez que digitá-lo
  2. quantas vezes posso exit até que o usuário seja desconectado completamente

Eu tentei man exit , mas parece que não há manual disponível. help exit também não conta muito.

Primeiro, achei que poderia encontrar uma possível solução usando pstree , mas a IMHO listou sshd com muita frequência e sudo su está ausente.

:~$ pstree | grep ssh
     |-sshd---sshd---sshd---sh---bash---bash-+-grep
    
por Thomas Weller 20.06.2015 / 00:33

2 respostas

3

Você pode usar a variável SHLVL para determinar até que ponto você está aninhado em um shell iniciado por um processo de login:

$ 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

Como o shell de login de su - limpa SHLVL , ele tem SHLVL=1 . Para sair do shell de login mais próximo no ancestral do shell, você precisa usar exit $SHLVL times.

SHLVL não é suportado por dash , portanto, sempre que entrar na imagem, a figura estará errada. No entanto, dash não é o shell de login de nenhuma conta utilizável no Ubuntu, e SHLVL funciona em shells mais avançados, como bash e zsh .

Não consigo reproduzir seu sudo su ausente:

$ pstree -ps $$
init(1)───sshd(1404)───sshd(12614)───sshd(12673)───zsh(12674)───sudo(31012)───su(31014)───bash(31016)───pstree(31084)
    
por muru 20.06.2015 / 01:06
1

Você pode simplesmente usar o comando ps sem argumentos. Aqui eu tenho 3 bashes aninhados e 3 saídas para digitar:

~ $ 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
    
por meuh 20.06.2015 / 12:28