Quando eu ssh em uma máquina Ubuntu, que tipo de shell estou usando

5

Continuo lendo sobre camadas interativas, não interativas, de login e sem login.

(Isto é no contexto de qual arquivo .bash * é lido).

Eu não entendo o que cada tipo de shell é, então vamos começar com o básico.

Se eu ssh do meu mac para a minha máquina Ubuntu, que tipo de shell está sendo acionado?

    
por Tyler DeWitt 26.09.2012 / 02:03

4 respostas

3

Se você conecta o SSH na sua caixa Ubuntu, você está recebendo um shell de login interativo. Aqui está a diferença:

  • Interativo vs. não interativo: Qualquer shell em que você pode digitar em um prompt é interativo. Na verdade, muitos scripts testam a variável $PS1 que contém a string de prompt para descobrir se eles são interativos. Se um shell está executando um script de shell, ele não é interativo.

    Então, se você usar ssh yourbox.example.com , você obterá um shell interativo com as configurações padrão, enquanto se você usar ssh yourbox.example.com mighty_shellscript.sh , você terá um shell não interativo e sua sessão SSH será encerrada quando o script termina.

  • Login vs. não-login: Quando você faz login no console ou remotamente (como SSH), ou quando você passa a opção -l para bash , você obtém um login Concha. Caso contrário - como quando você abre uma janela de terminal - você recebe um shell de não-login.

    Para testar se um shell é um shell de login, verifique se o nome do comando é -bash em vez de bash :

    ps -ef | grep [b]ash
    
por 26.09.2012 / 09:54
2

Você recebe um shell de login interativo. Mas não tome isso como certo, confira você mesmo.

Isso informa que você tem um shell de login (de man bash ):

# shopt | grep login
login_shell     on

Isso indica que você tem um shell interativo, procure o i (de man bash ):

# echo $-
himBH

O shell de login interativo que você obteve leu /etc/profile e um dos ~/.bash_profile , ~/.bash_login e ~/.profile , conforme explicado em man bash :

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes com‐ mands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

    
por 26.09.2012 / 17:03
0

A página do manual ssh (1) diz

If command is specified, it is executed on the remote host instead of a login shell.

e

When the user's identity has been accepted by the server, the server either executes the given command, or logs into the machine and gives the user a normal shell on the remote machine.

Eles me sugerem que o shell que você está usando é um shell de login.

    
por 26.09.2012 / 08:26
0

Tente este comando.

[max@localhost ~]$ echo $SHELL
/bin/bash

você está obtendo esta saída porque seu tipo de shell está armazenado nesta variável SHELL .

Para conhecer sua variável de ambiente, digite este comando

[max@localhost ~]$ env
.
.
.
HOSTNAME=localhost.localdomain
SHELL=/bin/bash
HISTSIZE=1000
USER=max
.
.
.

enquanto digita echo $SHELL , ele imprime o valor que estiver armazenado aqui

Esse valor é atualizado para cada inicialização

    
por 26.09.2012 / 06:30