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.