ShellCheck 0.9 está dispoñible, un analizador estático para scripts de shell

Publicouse o lanzamento do proxecto ShellCheck 0.9, que desenvolve un sistema para a análise estática dos scripts de shell que admite a identificación de erros nos scripts tendo en conta as características de bash, sh, ksh e dash. O código do proxecto está escrito en Haskell e distribúese baixo a licenza GPLv3. Ofrécense compoñentes para a integración con Vim, Emacs, VSCode, Sublime, Atom e varios marcos que admiten informes de erros compatibles con GCC.

ShellCheck 0.9 está dispoñible, un analizador estático para scripts de shell

Admite identificar tanto erros de sintaxe no código, que provocan que o intérprete mostre un erro no momento da execución, como problemas semánticos, polo que a execución non se interrompe, pero se producen anomalías no comportamento do script. O analizador tamén pode identificar colos de botella, problemas non obvios e trampas que poden provocar fallos en determinadas circunstancias.

Entre as clases de erros detectados, podemos notar problemas para escapar de caracteres especiais e enmarcalos entre comiñas, erros en expresións condicionais, uso incorrecto de comandos, problemas de procesamento de tempo e datas e erros de sintaxe típicos para principiantes. Por exemplo, a ausencia de espazos ao comparar “[[ $foo==0 ]]”, a presenza de espazos “var = 42” ou a indicación do símbolo $ ao asignar “$foo=42”, o uso de variables sen comiñas "echo $1", a indicación de corchetes extra en "tr -cd '[a-zA-Z0-9]'",

Ademais, admite a saída de recomendacións para mellorar o estilo de código, eliminar problemas de portabilidade e aumentar a fiabilidade dos scripts. Por exemplo, en lugar de “echo $[1+2]” proporase utilizar a sintaxe “$((..))”, a construción 'rm -rf “$STEAMROOT/”*' marcarase como non segura e capaz de eliminar o directorio raíz se a variable non se enche $STEAMROOT, e o uso de "echo {1..10}" resaltarase como incompatible con dash e sh.

Na nova versión:

  • Engadiuse un aviso para expresións como 'local readonly foo'.
  • Engadiuse un aviso sobre comandos non dispoñibles.
  • Engadiuse unha advertencia sobre as ligazóns de retroceso para "declarar x=1 y=$x".
  • Aviso engadido se $? usado para imprimir o código de retorno de echo, printf, [ ], [[ ]] e test.
  • Engadiuse unha recomendación para eliminar ((..))inarray[((idx))]=val.
  • Engadiuse unha recomendación para concatenar parénteses dobres en contextos aritméticos.
  • Engadiuse unha recomendación para eliminar parénteses na expresión a[(x+1)]=val.

Fonte: opennet.ru

Engadir un comentario