4 Punkte von GN⁺ 2024-12-09 | 1 Kommentare | Auf WhatsApp teilen
  • Die größten Shell-Programme der Welt

    • akinomyoga/ble.sh: Insgesamt 61K LoC (46K SLoC). Ein Bash Line Editor, ein fish-ähnlicher interaktiver Zeileneditor, der vollständig in reinem bash geschrieben ist. Die Hauptdatei out/ble.sh enthält 30K LoC (23K SLoC), insgesamt sind es über 60K+ LoC. Enthält viele Kommentare auf Japanisch. Es gibt einen Überblick darüber, wie ble.sh funktioniert, und er zeigt die Verwendung sehr ausgefeilter Datenstrukturen.

    • kalua: Ein OpenWRT-Add-on, das aus etwa 56K SLoC/Zeilen POSIX-Shell besteht.

    • bashdb: Ein bash-Debugger, der aus etwa 14K Zeilen bash besteht. Hat eine interessante Geschichte der Debugger-Implementierung.

    • drwetter/testssl.sh: Besteht aus 21K Zeilen bash in einer einzigen Datei. Scheint von Hand geschrieben zu sein.

    • Simplenetes: Kubernetes in 17K Zeilen Shell. Erstaunlich, aber derzeit inaktiv.

    • rkhunter: Laut offizieller Website 21K Zeilen Bourne-Shell, geschrieben zwischen 2003 und 2018.

    • romkatv/powerlevel10k: Im Verzeichnis internal/ befinden sich 12K Zeilen zsh-Skripte. Zusätzlich gibt es 8K Zeilen Konfigurations- und Hilfsskripte.

    • dylanaraps/neofetch: Zeigt Systeminformationen mit 10K Zeilen bash 3.2 an.

    • xwmx/nb: nb selbst enthält 26K LoC (22K SLoC) bash. Zählt man zusätzlich die bats-Tests als bash mit, kommt man auf 91K LoC (61K SLoC).

    • distrobox: Besteht aus mehr als 7K bash-Skripten. Ermöglicht die Nutzung jeder Linux-Distribution innerhalb des Terminals.

    • acme.sh: Ein 7K-Zeilen-Shell-Skript zum Ausstellen und Erneuern von Zertifikaten.

    • inxi 2.3.56 [obsolete]: Besteht aus 16K Zeilen bash. Begann 2008 als Fork von infobash.

    • bashforth: Besteht aus etwa 3800 Zeilen, implementiert aber eine echte Programmiersprache.

    • yoda: Halb so groß wie bashforth, implementiert aber einen vollständigen Interpreter und Compiler.

    • vegardit/bash-funk: Eine Bash-Bibliothek mit insgesamt 27K LoC (24K SLoC).

    • Relax-and-Recover: 35K LoC (24K SLoC). Ein Backup- und Restore-Tool.

    • abcde / A Better CD Encoder: Wird zum CD-Ripping verwendet und besteht aus etwa 5.5k LoC.

    • thc-segfault: 3.3K LoC. Ein pubnix-Server, der hauptsächlich in Bash aufgebaut ist.

    • ffmpeg/configure: 8.4K LoC. Das Konfigurationsskript von FFmpeg, von Hand geschrieben.

    • ffhevc: 4k LoC. Ein vollständig handgeschriebenes Bash-Wrapper-Skript zum Kodieren in HEVC-Video mit FFmpeg und libx265.

    • ffx264: 3.9k LoC. Ein vollständig handgeschriebenes Bash-Wrapper-Skript zum Kodieren in H.264/AVC-Video mit FFmpeg und libx264.

    • h264enc: 9.2k LoC. Ein vollständig handgeschriebenes Bash-Wrapper-Skript zum Kodieren in H.264/AVC-Video mit MEncoder.

    • bashtop: 5.3k LoC. Ein Ressourcenmonitor.

    • halcyon: 6.6k LoC. Ein Installationssystem für Haskell-Apps.

    • winetricks: Ein Shell-Skript mit 22K Zeilen. Installiert verschiedene Windows-Programme unter Wine.

    • wordshell: Etwa 7k Zeilen Code. Verwaltet mehrere WordPress-Sites über die Kommandozeile.

    • BaCon: Etwa 10k Zeilen Code. Wandelt in BASIC geschriebene Programme in C um.

  • Shell-ähnliche Sprachen / DSL

    • modernish: Ein in Shell geschriebener portabler Shell-Dialekt.

    • bats: Ein DSL zum Schreiben von Tests. Erzeugt bash-Code.

    • bashible: Ein Ansible-ähnliches DSL in bash.

    • clash: Ein objektorientiertes Framework, kompatibel mit moderner POSIX-Shell.

    • bash Infinity: Eine Standardbibliothek und ein Boilerplate-Framework für bash.

  • Kleine Programme

    • Alpine, Aboriginal, Debian scripts: Siehe Blogbeitrag.

    • Completion scripts: Groß, aber oft repetitiv.

    • _git Zsh completion: 8.3k Zeilen Code.

    • git-completion.bash: Docker-Completion.

    • dyne/Tomb: Etwa 3500 Zeilen zsh-Skript.

    • Basalt: Ein voll funktionsfähiger Paketmanager, vollständig in reinem Bash geschrieben (ca. 2021). Nur ein paar tausend Zeilen, hat aber bereits ein reichhaltiges Ökosystem (mehr als 15 Apps/Bibliotheken).

1 Kommentare

 
GN⁺ 2024-12-09
Hacker-News-Kommentare
  • Bei Sony wurde ich vor 25 Jahren einem Projekt zugeteilt, das ein sehr langsames und häufig abstürzendes Auftragsverwaltungssystem verbessern sollte.

    • Es handelte sich um ein System aus 50.000 Zeilen Shell-Skripten auf einem AIX-Server, das jahrzehntelang vernachlässigt worden war.
    • Mit Perl wurde das System auf 5.000 Zeilen reduziert und die Leistung um das 10- bis 100-Fache verbessert.
    • Dieses Projekt war eine sehr befriedigende Erfahrung.
  • Ich schrieb den Installer für Enrust CA und das Verzeichnis, und er entwickelte sich so weiter, dass er auf allen Unix-Systemen lief.

    • Die Installation war einfach, aber Upgrades waren komplex.
    • Die Utilities der einzelnen Unix-Systeme unterschieden sich jeweils leicht, sodass sie gepflegt werden mussten.
    • Das Unix von DEC war verwirrend, etwa weil Kommandozeilen-Utilities die Ausgabebreite begrenzten.
    • Bei HP-UX gab es je nach Version Änderungen.
  • Ich wollte einen Interpreter für die Skriptsprache Lil in bash schreiben, entschied mich wegen der Schwierigkeiten mit Gleitkomma-Arithmetik und der eingeschränkten Array-Unterstützung aber für AWK.

    • AWK war in POSIX-Umgebungen verfügbar und als allgemeine Sprache geeignet.
  • Bash-Skripte eignen sich nicht zum Schreiben komplexer Programme.

    • Die Lesbarkeit ist schlecht, die Regeln für den Variablen-Scope sind subtil, und die Fehlerbehandlung ist primitiv.
    • Es fehlt an statischen Analysetools, Lintern und Debuggern, was die Wartung erschwert.
    • Tests sind umständlich, und komplexe Logik oder Datenstrukturen lassen sich schwer handhaben.
    • Bash eignet sich für einfache Automatisierung, aber für komplexe Anwendungen sind andere Sprachen besser.
  • Das Skript von rkhunter ist gut geschrieben und sehr informativ.

    • Viel Code wird dafür verwendet sicherzustellen, dass Utilities auf verschiedenen Plattformen wie erwartet funktionieren.
    • Wäre es in einer komplexeren Programmiersprache geschrieben, wäre es weniger transparent gewesen.
  • Das größte Shell-Programm, das ich in der Vergangenheit verwendet habe, war abcde mit etwa 5.500 Zeilen Code.

  • Der FreeBSD-Update-Client besteht aus etwa 3.600 Zeilen sh-Code.

    • Als Tool zum Aktualisieren des Betriebssystems bietet er ziemlich viel Funktionalität.
  • Die Shell ist möglicherweise das einzige Tool, dessen Verfügbarkeit garantiert ist, aber wenn man große Shell-Apps schreibt, sollte man das überdenken.

  • Das Skript acme.sh umfasst 7,1K Zeilen und wird verwendet, um Zertifikate von Lets Encrypt auszustellen und zu erneuern.

  • In mod_pagespeed wurden Shell-Skripte für Systemtests verwendet, aber ein Wechsel zu Python wäre besser gewesen.

    • Es wurden 10.579 Zeilen bash-Code verwendet.
    • Eine schrittweise Umstellung wäre effizienter gewesen.