A variável de ambiente $SHELL é apenas para shells interativos?

A variável de ambiente $SHELL é apenas para shells interativos?

Vejo dois usos possíveis para a SHELLvariá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 -cparâ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 SHELLalgo estranho?

Responder1

Nenhuma das APIs POSIX C usa a SHELLvariável de ambiente explicitamente. Osystemepopenfunçã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;makeignora 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 $SHELLnã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, $SHELLem vez de shexecutar scripts sh. Isso é muito raro e não precisa impedi-lo de definir SHELLo 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 -copção.

informação relacionada