O $ SHELL armazena o caminho para o shell padrão no Linux?

3

Meu administrador diz que meu shell padrão está definido como bash , mas

$ echo $SHELL
/bin/csh
$

O shell padrão está relacionado à variável SHELL ? Não é, qual é a variável usada?

    
por Lazer 17.11.2010 / 16:11

5 respostas

5

Isso não é 100% verdadeiro. Por exemplo:

$> echo $SHELL
/bin/bash
$> /bin/ksh
$] echo $SHELL
/bin/bash

$ SHELL contém o shell pai da sua sessão, que geralmente é seu shell de login, conforme determinado pela entrada do usuário em / etc / passwd. Mais claramente, $ SHELL é o shell pai a partir do qual sua sessão atual gerou. No meu exemplo, o shell atual, Korn, está tecnicamente rodando dentro do BASH, e é por isso que o $ SHELL não foi modificado.

Obviamente, esta é uma distinção quase exclusivamente semântica, no entanto, não caia na armadilha de acreditar que o que você vê é sempre o que você obtém.

    
por 17.11.2010 / 18:10
2

Não, não está relacionado ao shell padrão.

O shell default do sistema é definido no arquivo /etc/default/useradd .

Seu shell padrão é definido no arquivo /etc/passwd . Você pode alterá-lo pelo comando chsh .

As variáveis $SHELL geralmente armazenam o caminho executável do shell atual . Cada casca se comporta de maneira diferente neste ponto. Por exemplo. O bash define a variável SHELL se ela não estiver definida quando for iniciada, caso contrário, ela permanecerá inalterada. tcsh não suporta essa variável.

    
por 17.11.2010 / 17:52
2

A variável é para sua informação ("Ei, em que shell estou sendo executado?"), em vez da maneira como você define o shell. Como as variáveis de ambiente Unix só podem se propagar para processos filhos e não fazer backup para pais, geralmente variáveis de ambiente como essa são descritivas, em vez de opções de configuração.

Para ver seu shell padrão, veja sua entrada em /etc/passwd e, para alterar isso, execute chsh . (Isto é supondo que você não está usando NIS ou LDAP para essa informação; nesse caso use getent passwd $USERNAME .) E, como observa andcoz, os padrões iniciais para novos usuários adicionados com o programa useradd padrão estão em /etc/default/useradd .

    
por 17.11.2010 / 18:03
1

O “default shell” para um administrador do sistema unix é o que está armazenado na coluna “shell” do banco de dados do usuário. Este é o programa que é invocado quando você efetua login no modo de texto (em um console de modo de texto ou através da rede, por exemplo, ssh).

O "shell padrão" para um aplicativo unix é sh ou $SHELL . Existe alguma variação quanto ao fato de $SHELL ser um shell interativo ou um shell para executar scripts. A especificação POSIX é ambígua a esse respeito, refletindo uma prática divergente:

This variable shall represent a pathname of the user's preferred command language interpreter. If this interpreter does not conform to the Shell Command Language in the Shell and Utilities volume of IEEE Std 1003.1-2001, Chapter 2, Shell Command Language, utilities may behave differently from those described in IEEE Std 1003.1-2001.

Esse bit sobre a linguagem de comandos preferida significa que alguns aplicativos podem tentar executar comandos em $SHELL , usando a sintaxe de comando do shell POSIX. No entanto, a maneira normal de executar um comando shell em um aplicativo unix é por meio de funções como system , que deve encontrar um shell adequado, independentemente do valor da variável de ambiente $SHELL . Bash e ksh são exemplos de shells compatíveis com POSIX. Zsh chega perto. O Csh é diferente, e você pode ocasionalmente ter problemas devido a SHELL ser definido como csh (não é muito comum, pois a maioria dos aplicativos chamam sh e csh é compatível o suficiente para uso básico).

Na prática, para um usuário unix , $SHELL é seu shell interativo preferido, ou seja, o que você deseja ver quando inicia um emulador de terminal. Não precisa ser igual ao seu login shell¹: você pode configurá-lo em .profile ou .login .

Por exemplo, normalmente deixo qualquer shell de login como padrão, mantenho um .profile compatível com o Bourne, mas defina SHELL como zsh, se estiver disponível.

    
por 17.11.2010 / 22:50
0

Eu sempre entendi que as variáveis ambientais são consultivas para os programas que você está executando. $ SHELL seria o shell que você deseja que um programa inicie quando precisar executar um shell. Compare com $ EDITOR, seu programa de e-mail pode usá-lo para decidir qual editor oferecer a você. B / c essas variáveis ambientais são tão fáceis de mudar que você não pode realmente confiar nelas como a palavra final sobre o que o mundo realmente é.

Relacionado à sua pergunta no shell padrão: chsh é um comando que permite que você altere seu shell de login. Antes de alterar, mostra qual é a sua escolha atual.

    
por 17.11.2010 / 22:19