Alguma surpresa ao configurar o SHELL env var?

1

Estou usando o macOS e, como ele vem com o Bash 3.2, atualizei para o 4.4 via homebrew. Eu configurei meu terminal para usar a versão mais recente definindo seu comando de inicialização para:

/usr/local/bin/bash -l

Eu estava recentemente brincando com o comando script para gravar e reproduzir sessões de terminal e descobri que ele estava usando o Bash 3.2

A configuração de export SHELL=/usr/local/bin/bash corrige isso, mas estou me perguntando se é aconselhável configurá-lo. Eu imagino que possa ser desaconselhável não configurá-lo, mas não tenho certeza do que mais toma decisões com base no SHELL env var.

    
por ivan 11.08.2017 / 00:21

1 resposta

2

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.

    
por 11.08.2017 / 01:56