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

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

Continuo lendo sobre shells interativos, não interativos, de login e sem login.

(Isso ocorre no contexto de qual dos arquivos .bash* é lido).

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

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

Responder1

Se você usar SSH em sua caixa do Ubuntu, receberá um shell de login interativo. Aqui está a diferença:

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

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

  • Login versus não login:Ao fazer login no console ou remotamente (como SSH), ou quando você passa a -lopção para bash, você obtém um shell de login. Caso contrário - como quando você abre uma janela de terminal - você obtém um shell sem login.

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

    ps -ef | grep [b]ash
    

Responder2

Você obtém um shell de login interativo. Mas não tome isso como garantido, verifique você mesmo.

Isso indica 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 por i(from man bash):

# echo $-
himBH

O shell de login interativo que você obtém leu /etc/profilee em vez de um de ~/.bash_profile, ~/.bash_logine ~/.profile, conforme explicado em man bash:

Quando bash é invocado como um shell de login interativo, ou como um shell não interativo com a opção --login,ele primeiro lê e executa comandos do arquivo /etc/profile, se esse arquivo existir. Depois de ler esse arquivo, ele procura por ~/.bash_profile, ~/.bash_login e ~/.profile, nessa ordem, e lê e executa comandos do primeiro que existe e é legível. A opção --noprofile pode ser usada quando o shell é iniciado para inibir esse comportamento.

Responder3

Ossh(1)página de manual diz,

Secomandofor especificado, ele será executado no host remoto em vez de em um shell de login.

e

Quando a identidade do usuário é aceita pelo servidor, o servidor executa o comando fornecido ou efetua login na máquina e fornece ao usuário um shell normal na máquina remota.

Isso me sugere que o shell que você está obtendo é um shell de login.

Responder4

Experimente 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 saber sua variável de ambiente digite este comando

[max@localhost ~]$ ambiente
.
.
.
HOSTNAME=localhost.localdomain
SHELL=/bin/bash
TAMANHO HISTÓRICO=1000
USUÁRIO = máx.
.
.
.

enquanto digita echo $SHELLele irá imprimir o valor armazenado aqui

Este valor é atualizado a cada inicialização

informação relacionada