Disponible ShellCheck 0.9, un analizador estático para scripts de shell

Se ha publicado el lanzamiento del proyecto ShellCheck 0.9, que desarrolla un sistema de análisis estático de scripts de shell que admite la identificación de errores en los scripts teniendo en cuenta las características de bash, sh, ksh y dash. El código del proyecto está escrito en Haskell y distribuido bajo la licencia GPLv3. Se proporcionan componentes para la integración con Vim, Emacs, VSCode, Sublime, Atom y varios marcos que admiten informes de errores compatibles con GCC.

Disponible ShellCheck 0.9, un analizador estático para scripts de shell

Admite la identificación tanto de errores de sintaxis en el código, que hacen que el intérprete muestre un error en el momento de la ejecución, como de problemas semánticos, por lo que la ejecución no se interrumpe, pero se producen anomalías en el comportamiento del script. El analizador también puede identificar cuellos de botella, problemas no obvios y trampas que pueden provocar fallos en determinadas circunstancias.

Entre las clases de errores detectados, podemos destacar problemas al escapar de caracteres especiales y ponerlos entre comillas, errores en expresiones condicionales, uso incorrecto de comandos, problemas para procesar horas y fechas y errores de sintaxis típicos para principiantes. Por ejemplo, la ausencia de espacios al comparar “[[ $foo==0 ]]”, la presencia de espacios “var = 42” o la indicación del símbolo $ al asignar “$foo=42”, el uso de variables sin comillas “echo $1”, la indicación de corchetes adicionales en "tr -cd '[a-zA-Z0-9]'",

Además, admite la generación de recomendaciones para mejorar el estilo del código, eliminar problemas de portabilidad y aumentar la confiabilidad de los scripts. Por ejemplo, en lugar de “echo $[1+2]” se propondrá utilizar la sintaxis “$((..))”, la construcción 'rm -rf “$STEAMROOT/”*' se marcará como insegura y capaz de eliminar el directorio raíz si la variable $STEAMROOT no está completa, y el uso de "echo {1..10}" se resaltará como incompatible con dash y sh.

Versículos nuevos:

  • Se agregó una advertencia para expresiones como 'foo de solo lectura local'.
  • Se agregó una advertencia sobre comandos no disponibles.
  • Se agregó una advertencia sobre vínculos de retroceso para 'declarar x=1 y=$x'.
  • Se agregó una advertencia si $? se utiliza para imprimir el código de retorno de echo, printf, [ ], [[ ]] y test.
  • Se agregó una recomendación para eliminar ((..))inarray[((idx))]=val.
  • Se agregó una recomendación para concatenar paréntesis dobles en contextos aritméticos.
  • Se agregó una recomendación para eliminar paréntesis en la expresión a[(x+1)]=val.

Fuente: opennet.ru

Añadir un comentario