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

6

Eu vejo dois usos possíveis para a variável de ambiente SHELL :

  • Pode ser usado para especificar o shell interativo que o usuário deseja usar e / ou
  • ele pode ser usado por processos para executar outros comandos com, substituindo o comando no usual /bin/sh -c "..." idiom.

Se fosse usado apenas para o primeiro, poderia ser algo muito estranho (por exemplo, ipython ), se também fosse usado para o último, ele precisa fornecer uma forma básica de compatibilidade POSIX, por exemplo, Entenda o parâmetro -c e mantenha o ambiente intacto ( que é surpreendentemente complicado ).

O padrão POSIX não é muito explícito aqui, apenas escreve.

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.

O segundo uso é realmente comum e / ou válido e, portanto, algo para se preocupar se eu definir SHELL como algo estranho?

    
por Joachim Breitner 17.02.2016 / 09:47

1 resposta

5

Nenhuma das APIs POSIX C usa a variável de ambiente SHELL explicitamente. O system e popen deve chamar um programa chamado sh . Alguns utilitários (por exemplo, ex , mailx ,…) deve usar $SHELL , mas sempre para executar o código fornecido pelo usuário; make ignora explicitamente $SHELL .

A seção sobre variáveis de ambiente permite utilitários , 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. Zsh e peixes são alternativas populares. Eu tenho usado o zsh por uma década em várias variantes do Unix, e não me lembro de nenhum utilitário do sistema ter falhado. Vi o código ocasionalmente escrito chamando $SHELL em vez de sh para executar scripts sh. Isso é muito raro e não precisa impedi-lo de configurar SHELL para o que você quiser.

Em suma, sim, SHELL é seu shell interativo favorito, e os aplicativos não recebem garantia de qual sintaxe aceita ou até mesmo se aceita uma opção -c .

    
por 18.02.2016 / 02:01