Existe uma implementação gratuita de / bin / sh sem extensões?

1

Gostaria de desenvolver scripts /bin/sh portáteis, mas meu ambiente vincula /bin/sh a /bin/bash . Mesmo quando executado no modo --posix , /bin/bash ainda lida com alguns recursos não portáteis como [[ e $() . Estou (agora) ciente de que essas bash extensões não são portáteis, mas não sei qual outra sintaxe que estou usando nem sempre disponível.

Existe uma implementação gratuita de /bin/sh que rejeita construções não portáteis que eu poderia usar para testar se meus scripts não usam nenhum bash -isms?

    
por meustrus 21.06.2018 / 23:44

1 resposta

2

Que tal bosh do Bourne Shell POSIXified:

Ainda tem algumas extensões, mas elas estão bem documentadas:

link

É mais rápido que dash e um pouco mais lento que ksh93 , o que faz dele o segundo shell mais rápido.

Observe que dash não suporta caracteres de vários bytes e, portanto, é útil apenas para sistemas incorporados pequenos.

BTW: bosh permite configurar bem o comportamento. O osh compatível com o Solaris-10 é compilado da mesma origem que bosh . Dê uma olhada em Makefile . Quando eu tiver algum tempo, posso dar uma olhada se eu poderia criar um Makefile pré-configurado para esse propósito.

Atualização: Durante os últimos dias, criei uma nova variante de compilação "bosh" e chamo de "pbosh". Ele será incluído no próximo instantâneo de schilytools que provavelmente será publicado em 29 de junho ou 2 de julho de 2018.

"pbosh" é um shell destinado a testar scripts de shell para portabilidade.

Ele não implementa extensões no POSIX e, portanto, falharia no caso de que um recurso de shell além do padrão POSIX é usado.

Tenha em mente que um script que funciona com "pbosh" ainda pode falhar com outros shells como POSIX tem algumas características não especificadas. Um exemplo é a maneira como os pipelines são criados. "pbosh" implementa o método otimizado e, além disso, executa o programa mais à direita de um cano dentro da casca processo no caso em que este é um shell embutido. Como resultado, é mais provável que todos os pipes que funcionam com "pbosh", também funcionarão com "ksh93", mas ainda assim pode falhar com, e. "bash".

Se você gosta de verificar se o seu script é portátil para o SVr4 Bourne Shell como presente em p. Solaris 10, recomenda-se verificar se também roda com outra variante de compilação "bosh" de schilytools chamada "osh". Esta é uma versão portátil do Bourne Shell Solaris 10 SVr5.

Nota: para tornar o "pbosh" mais útil, os alias persistentes não são desativado por padrão. Você pode testar seus scripts com outros shells em Além disso, edite o Makefile e comente as linhas com:

CPPOPTS +=      -DDO_GLOBALALIASES      # Include persistent aliases in ~/.globals 
CPPOPTS +=      -DDO_LOCALALIASES       # Include persistent aliases in .locals 

Em seguida, chame "make clean all" para recompilar "pbosh" com aliases persistentes desativado.

    
por 22.06.2018 / 00:35