5 Punkte von GN⁺ 2023-11-25 | 1 Kommentare | Auf WhatsApp teilen

Einführung in ShellCheck

  • ShellCheck ist ein Tool, das Bugs in Shell-Skripten findet.
  • Es kann lokal über cabal, apt, dnf, pkg und brew installiert werden.
  • Wenn man ein Skript einfügt, gibt ShellCheck die Analyseergebnisse aus.

Funktionen von ShellCheck

  • ShellCheck kann unter der GPLv3-Lizenz frei verwendet werden.
  • Es ist im ShellCheck-Wiki dokumentiert, und der Quellcode kann auf GitHub eingesehen werden.
  • Es ist in den meisten Distributionen oder Paketmanagern bereits paketiert.
  • Es wird in wichtigen Editoren als integrierter Linter unterstützt, und über CodeClimate, Codacy und CodeFactor kann der Code von GitHub-Repositories automatisch geprüft werden.
  • Es wurde in Haskell geschrieben und eignet sich gut für Nutzer, die daran interessiert sind.

Danksagung

  • Besonderer Dank gilt den GitHub Sponsors: Gitpod, Mercedes-Benz, BashSupport Pro, per1234, WhitewaterFoundry, cavcrosby, dcminter, photostructure, Cronitor, djdefi, steve-chavez und weiteren.

Meinung von GN⁺

  • Das Wichtigste an diesem Artikel ist, dass ShellCheck ein nützliches Tool zum Finden von Bugs in Shell-Skripten ist.
  • Dass ShellCheck kostenlos ist, auf verschiedenen Plattformen und in vielen Editoren unterstützt wird und einfach zu nutzen ist, dürfte für viele interessant sein.
  • Besonders die Unterstützung durch die Open-Source-Community und die Tatsache, dass es in Haskell entwickelt wurde, könnten für Softwareentwickler attraktiv sein.

1 Kommentare

 
GN⁺ 2023-11-25
Hacker-News-Kommentare
  • Hinweise zum Schreiben von Skripten

    • Es wird empfohlen, die Option -u (nounset) zu verwenden, damit bei der Verwendung nicht deklarierter Variablen ein Fehler ausgelöst wird. Eine Ausnahme ist, dass leere Arrays bei der Array-Erweiterung als unbound betrachtet werden können.
    • Mit der Option -n (noexec) kann ein Dry-Run versucht werden, der die Ausführung von Befehlen verhindert.
    • Die Option -e (errexit) ist ebenfalls nützlich, aber man sollte beachten, dass nur fehlgeschlagene "naked" Befehle zum Abbruch führen. Um das zu vermeiden, wird bevorzugt, Befehlen || fail "..." hinzuzufügen.
  • Auffinden von Schwachstellen in Shell-Skripten

    • Es wurde eine Privilege-Escalation-Schwachstelle über arithmetische Expansion entdeckt. Wenn man zum Beispiel $((1 + ENV_VAR)) verwendet und $ENV_VAR kontrollieren kann, lässt sich Code einschleusen.
    • Shellcheck erkennt das in der Standardkonfiguration nicht. Wenn sicherheitskritische Funktionen implementiert werden, sollte man besser keine Shell verwenden.
  • Shellcheck und strictbash

    • Shellcheck ist sehr nützlich.
    • strictbash ist ein Wrapper, der vor der Ausführung eines Skripts Shellcheck startet, sodass das Skript bei Fehlern nicht ausgeführt werden kann. Außerdem setzt es alle Bash-"strict mode"-Flags.
  • Erwähnungen von Shellcheck

    • Es gibt viele Erwähnungen von Shellcheck, und die letzte größere Diskussion fand 2021 statt.
  • Verwendung von Haskell und Turtle

    • Durch die Umstellung von Deployment-Skripten auf Haskell mit der Turtle-Bibliothek konnte Duplizierung stark reduziert werden.
    • Dadurch wurde der Code insgesamt deutlich kürzer.
  • Verwendung von Shellcheck und Lintern

    • Es wird dem Grundsatz "Erst committen, nachdem alle Warnungen behoben sind" gefolgt, und Shellcheck sowie andere Linter sind in die Pre-Commit-Konfiguration aufgenommen.
    • Die meisten Shell-Skripte befinden sich in .gitlab-ci.yml-Dateien und sind daher schwer zu prüfen. Es wurde ein Wrapper erstellt, um sie automatisch zu prüfen.
  • Bash Language Server

    • Es gibt auch einen Bash Language Server.
  • Lerneffekt von Shellcheck

    • Als mit Shellcheck das erste Produktionsskript für /bin/sh geprüft wurde, wurde trotz Erfahrung im Skriptschreiben seit den 80er-Jahren noch Neues gelernt.
  • Empfehlung für Bach

    • Wenn Bash verwendet werden muss, wird empfohlen, Bach zu verwenden. Für ausreichend lange Aufgaben ist Bash möglicherweise nicht geeignet.
  • Shellcheck und die Behandlung von source/import

    • Shellcheck ist großartig, aber der Umgang mit source oder Imports ist sehr mühsam. Das ist ein Problem, das daher rührt, dass sh ein Albtraum ist.