5 points par GN⁺ 2023-11-25 | 1 commentaires | Partager sur WhatsApp

Présentation de ShellCheck

  • ShellCheck est un outil qui détecte les bugs dans les scripts shell.
  • Il peut être installé en local via cabal, apt, dnf, pkg, brew.
  • En collant un script, ShellCheck affiche les résultats de l’analyse.

Caractéristiques de ShellCheck

  • ShellCheck peut être utilisé librement sous licence GPLv3.
  • La documentation est disponible sur le Wiki de ShellCheck, et le code source peut être consulté sur GitHub.
  • Il est déjà empaqueté dans la plupart des distributions ou gestionnaires de paquets.
  • Il est pris en charge comme linter intégré dans les principaux éditeurs, et le code des dépôts GitHub peut être vérifié automatiquement via CodeClimate, Codacy et CodeFactor.
  • Il est écrit en Haskell, ce qui peut convenir aux utilisateurs intéressés par ce langage.

Remerciements

  • Remerciements particuliers aux soutiens GitHub Sponsors : Gitpod, Mercedes-Benz, BashSupport Pro, per1234, WhitewaterFoundry, cavcrosby, dcminter, photostructure, Cronitor, djdefi, steve-chavez, etc.

Avis de GN⁺

  • Le point le plus important de cet article est que ShellCheck est un outil utile pour trouver les bugs dans les scripts shell.
  • ShellCheck est gratuit, pris en charge sur de nombreuses plateformes et dans divers éditeurs, et sa facilité d’utilisation peut intéresser de nombreuses personnes.
  • En particulier, le soutien de la communauté open source et le fait qu’il soit développé en Haskell peuvent le rendre attractif pour les développeurs logiciels.

1 commentaires

 
GN⁺ 2023-11-25
Avis Hacker News
  • Points d’attention lors de l’écriture de scripts

    • Il est recommandé d’utiliser l’option -u (nounset) afin de provoquer une erreur lors de l’utilisation de variables non déclarées. Une exception existe lorsque, lors de l’expansion d’un tableau, un tableau vide est considéré comme unbound.
    • On peut tenter une fausse exécution (dry-run) avec l’option -n (noexec) pour empêcher l’exécution des commandes.
    • L’option -e (errexit) est également utile, mais il faut noter que seules les commandes « nues » qui échouent provoquent l’arrêt. Pour éviter cela, on préfère ajouter || fail "..." à la commande.
  • Découverte de vulnérabilités dans les scripts shell

    • Une vulnérabilité d’élévation de privilèges via l’expansion arithmétique a été découverte. Par exemple, si l’on peut contrôler $ENV_VAR via $((1 + ENV_VAR)), il est possible d’injecter du code.
    • Shellcheck ne le détecte pas avec la configuration par défaut. Il vaut mieux ne pas utiliser le shell pour implémenter des fonctions critiques pour la sécurité.
  • Shellcheck et strictbash

    • Shellcheck est très utile.
    • strictbash est un wrapper qui exécute Shellcheck avant le script, empêchant son exécution s’il y a des erreurs. Il active également tous les drapeaux du « strict mode » de Bash.
  • Mentions de Shellcheck

    • Shellcheck est souvent mentionné, et la dernière grande discussion remonte à 2021.
  • Utilisation de Haskell et Turtle

    • En utilisant Haskell pour convertir des scripts de déploiement avec la bibliothèque Turtle, on a considérablement réduit la duplication.
    • Au final, le code est devenu beaucoup plus court.
  • Utilisation de Shellcheck et des linters

    • On suit le principe « corriger tous les avertissements avant de commit », et on inclut Shellcheck ainsi que d’autres linters dans la configuration pre-commit.
    • La plupart des scripts shell se trouvent dans les fichiers .gitlab-ci.yml, ce qui les rend difficiles à vérifier. Un wrapper a donc été créé pour les contrôler automatiquement.
  • Serveur de langage Bash

    • Il existe aussi un serveur de langage Bash.
  • Effet d’apprentissage de Shellcheck

    • Lorsqu’on a utilisé Shellcheck pour vérifier son premier script /bin/sh de production, on a appris des choses nouvelles malgré une expérience de scripting remontant aux années 80.
  • Recommandation d’utiliser Bach

    • Quand il faut utiliser Bash, il est recommandé d’utiliser Bach. Pour des tâches suffisamment longues, utiliser Bash n’est peut-être pas approprié.
  • Shellcheck et la gestion de source/import

    • Shellcheck est excellent, mais gérer les sources ou les imports est très fastidieux. C’est un problème qui vient du fait que sh est un vrai cauchemar.