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.
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