Considerando que o POSIX é a coisa mais próxima de um padrão comum entre todos os departamentos, estou interessado em saber se existe um shell que o suporte exclusivamente. Embora a maioria dos shells modernos forneça suporte para POSIX (e executará scripts compatíveis com POSIX sem nenhum problema), eles não fazem um bom trabalho ao apontar recursos não compatíveis.
Existe algum shell que implemente apenas o POSIX e o POSIX, de forma a gerar um erro para qualquer recurso não compatível?
Edição Quero esclarecer que não estou pedindo dicas gerais para escrever scripts de shell portáteis. A questão relacionada mencionada nos comentários já cobriu isso. Pensei nessa questão quando descobri que bash
há uma --posix
opção, mas apenas para descobrir que ela afeta apenas alguns comportamentos de inicialização que não são exatamente o que estou procurando.
fonte
dash
. Mencionei a portabilidade como um contexto geral para a minha pergunta, mas essa não era sua verdadeira intenção.Respostas:
Infelizmente, 'portátil' é geralmente um requisito mais forte do que 'compatível com POSIX' para scripts de shell. Ou seja, escrever algo que é executado em qualquer shell POSIX não é muito difícil, mas fazê-lo funcionar em qualquer shell do mundo real é mais difícil.
Você pode começar instalando todos os shell no seu gerenciador de pacotes, em particular os
posh
sons do debian como o que você deseja ( Shell Comum compatível com a Política). A política do Debian é POSIX, com algumas exceções (echo -n
especificadas,local
...).Além disso, os testes devem abranger alguns shells (especialmente o / bin / sh) em várias plataformas. Eu testei no Solaris (/ bin / sh e xpg4 / sh) e BSD. O AIX e o HP-UX são muito compatíveis e não causam problemas. bash é um pequeno mundo próprio.
Eu recomendo o guia Autoconf para shell portátil , que é absolutamente brilhante e economiza muito tempo. Grandes pedaços são obsoletos, mas tudo bem; apenas pule TruUnix e Ultrix e assim por diante, se você não se importa!
fonte
posh
realmente soa como o que estou pedindo. Vou fazer alguns testes assim que puder.Você pode usar o ShellCheck (GitHub) como um linter para seus scripts de shell. Existe também uma versão online .
Para detectar problemas de compatibilidade com POSIX (por exemplo, SC2039 ), a linha shebang do seu shell script deve ser
#!/bin/sh
. Você também pode passar--shell=sh
parashellcheck
.Exemplo (
test.sh
):Resultado (
shellcheck test.sh
):fonte
O Bash será executado no modo compatível com POSIX se a
POSIXLY_CORRECT
variável de ambiente estiver definida. Na página de manual:Muitos outros utilitários GNU também serão respeitados
POSIXLY_CORRECT
, portanto, se você estiver em um sistema com ferramentas predominantemente GNU (por exemplo, a maioria dos sistemas Linux), este será um bom começo se seu objetivo for a conformidade com POSIX.fonte
[[
.