O significado convencional da variável de ambiente SHELL
é o shell interativo favorito do usuário. Não há nenhuma obrigação de que ele tenha uma sintaxe específica (não precisa ser do tipo Bourne), que ela suporte qualquer sintaxe de linha de comando específica (como -c
) ou que tenha algo a ver com o shell de login (os aplicativos que usam SHELL
normalmente usam o shell de login se SHELL
não estiver atualizado). É usado principalmente por emuladores de terminal como o programa a ser executado por padrão.
Se você efetuar login no modo de texto (em um console de texto ou por SSH), o que você obtém é o shell de login listado no banco de dados do usuário (por exemplo, /etc/passwd
). Quando você abre um terminal em um ambiente de GUI, obtém o shell especificado pela variável de ambiente SHELL
se a variável estiver configurada. Se você deseja o mesmo shell para logins no modo de texto, altere seu shell de login com chsh
ou faça seu shell de login mudar para seu shell favorito com exec
.
Ocasionalmente, você pode encontrar um programa que usa $SHELL -c
em vez de sh -c
para executar o código na sintaxe sh. Mas isso é muito raro. É tecnicamente permitido pelo POSIX, mas violaria o uso histórico. Na prática, definir SHELL
é seguro. Eu tive meu shell de login definido como /bin/sh
e SHELL
definido como /path/to/zsh
na maioria das máquinas por cerca de duas décadas.