Evitando “BASH-isms” em shell scripts

37

Existe uma ferramenta similar a Perl :: Critic que inspecionará seus scripts de shell e apontar falhas, questões de portabilidade, usos de programas não padronizados sem fallbacks, usos depreciados do programa, etc?

Eu percebo que set -o posix desativará o uso não POSIX, mas isso não me dirá coisas que quero saber, como matrizes de shell de indexação zsh começando em 1 e bash, de 0, e ash não suportando arrays em tudo.

    
por amphetamachine 08.11.2011 / 01:04

1 resposta

36

Existem checkbashisms . No Debian, ele é enviado como parte das ferramentas do mantenedor de pacotes .

Teste seus scripts em traço e posh . Ambos têm algumas construções não POSIX, mas se o seu script funcionar em ambos, é provável que funcione na maioria dos locais. (Com a ressalva de que é difícil testar scripts típicos de shell, pois eles tendem a ter muitos casos de canto.)

Se você pretende que seus scripts sejam portáveis para plataformas Linux embarcadas, teste-os com o BusyBox . Note que o BusyBox pode ser mais ou menos restrito, dependendo de quão pequeno seja um sistema embarcado que você queira; é normal ter scripts que dependam de um recurso que algumas instalações do BusyBox não possuem.

Note que a não-portabilidade não vem apenas do shell, ela também vem de utilitários externos. O OpenBSD e Solaris tendem a ter utilitários com recursos POSIX e não muito mais, então eles são bons para testar a portabilidade.

Você deve consultar a especificação POSIX e outros recursos mencionados em este tópico (especialmente o manual autoconf ); mas isso é documentação, não ajuda se você usar um recurso acidentalmente.

    
por 08.11.2011 / 01:53

Tags