
Vejo dois usos possíveis para a SHELL
variável de ambiente:
- Pode ser usado para especificar ointerativoshell que o usuário deseja usar e/ou
- ele pode ser usado por processos para executar outros comandos, substituindo o comando no
/bin/sh -c "..."
idioma usual.
Se fosse usado apenas para o primeiro, poderia ser algo muito estranho (por exemplo, ipython
), se também for usado para o último, precisa fornecer uma forma básica de compatibilidade POSIX, por exemplo, entender o -c
parâmetro e manter o ambiente intacto (o que é surpreendentemente complicado).
OPadrão POSIXnão é muito explícito aqui, apenas escreve.
Esta variável deve representar um nome de caminho do interpretador de linguagem de comando preferido do usuário. Se este interpretador não estiver em conformidade com a Shell Command Language no volume Shell and Utilities do IEEE Std 1003.1-2001, Capítulo 2, Shell Command Language, os utilitários poderão se comportar de maneira diferente daqueles descritos no IEEE Std 1003.1-2001.
O segundo uso é realmente comum e/ou válido e, portanto, é algo com que me preocupar se eu definir SHELL
algo estranho?
Responder1
Nenhuma das APIs POSIX C usa a SHELL
variável de ambiente explicitamente. Osystem
epopen
função deve chamar um programa chamado sh
. Alguns utilitários (por exemploex
,mailx
, …) deve usar $SHELL
, mas sempre para executar código fornecido pelo usuário;make
ignora explicitamente $SHELL
.
A seção sobrevariáveis ambientaispermiteServiços de utilidade pública, mas não APIs C (“interfaces de sistema”) para ter um comportamento diferente se $SHELL
não estiver em conformidade com POSIX sh.
Na prática, SHELL
é definido como o shell de login do usuário, que pode ou não ser compatível com POSIX.Zshepeixesão alternativas populares. Uso o zsh há uma década em várias variantes do Unix e não me lembro de nenhum utilitário do sistema falhar. Tenho visto chamadas ocasionais de código escrito de maneira desleixada, $SHELL
em vez de sh
executar scripts sh. Isso é muito raro e não precisa impedi-lo de definir SHELL
o que quiser.
Resumindo, sim, SHELL
é o seu shell interativo favorito, e os aplicativos não recebem garantia de qual sintaxe ele aceita, ou mesmo se aceita uma -c
opção.