The Biggest Shell Programs in the World - oils-for-unix/oils GitHub Wiki

Help me fill out this page! It's freely editable.

What programs should be listed? I'm using "biggest" in the sense of substantial, not necessarily the raw number of lines.

  • Hand-written shell scripts. There are many big autoconf-generated scripts, like the 70K-line coreutils script, but I don't consider them substantial in this sense.
  • Shell programs that use data structures and algorithms.
    • As a counterexample, bash-completion is pretty sophisticated, but it's also repetitive because it has a relatively simple function for every command on a Unix machine.
  • Shell programs that are over 5K lines (though there may be exceptions). The biggest shell programs that aren't repetitive tend to be in the 10K+ line range. I haven't seen any programs over 100K lines.

The List

  • akinomyoga/ble.sh -- 87K lines (63K LoC w/o comments) in total. Bash Line Editor---fish-like interactive line editor in pure bash! The main file out/ble.sh has 39K lines (29K LoC), but there are 80K+ lines including module files in total. There are many comments (in Japanese).
    • How Interactive Shells Work has a nice overview of how ble.sh works. It's very sophisticated, using bind -x to read raw bytes from the terminal, decoding those itself in multiple explicit state machines, maintaining a drawing buffer, updating the buffer, etc. It has timing and "fibers", etc.
    • This comment on issue 663 has details on the shell parser! I think this is one of the most sophisticated uses of data structures in shell I've seen.
    • We are trying to run ble.sh under OSH. It mostly parses.
    • First commit in 2015 with 8K lines / 6K loc. The actual development has started in 2013.
  • kalua - OpenWRT addon ~56K SLoC/lines of POSIX shell
  • bashdb, the bash debugger. ~14K lines of bash. Interesting history: Implementing Debuggers
  • drwetter/testssl.sh -- 21K lines of bash in a single file! Appears to be hand-written. History: Back in 2006 it started with a few openssl commands.... (Hit issue #606 parsing it.)
  • Simplenetes: Kubernetes in 17K lines of Shell. Amazing! But seems dormant. Hacker News Thread.
  • rkhunter (official site) -- 21K lines of Bourne shell written from 2003-2018!
  • romkatv/powerlevel10k -- 12K lines of zsh scripts in the directory internal/. There are other 8K lines of configs and helper scripts. First commit in 2014.
  • dylanaraps/neofetch -- 10K lines of bash 3.2. Displays system information. May also do something interesting with images (?)
    • first commit 2015
  • xwmx/nb -- 26K lines (22K LoC) of bash in nb itself. An additional 91K lines (61K LoC) if we count bats tests as bash.
    • First commit in 2014, but active commit history starts in early 2016.
  • distrobox -- over 7k lines of bash script. Use any linux distribution inside your terminal.
  • acme.sh -- 8K lines of shell script. Issues and renews certificates.
  • inxi 2.3.56 [obsolete] -- 16K lines of bash. A fork of infobash in 2008 (889 lines then). infobash has started in 2005. From v2.9, inxi is replaced by the Perl implementation.
  • bashforth -- At ~3800 lines this isn't huge, but it apparently implements a real programming language. It has a lot of whitespace and comments.
  • yoda -- While only about half the size of the above bashforth, this again is an implementation of a whole interpreter and compiler, while being considerably more feature-packed. Same author, but a 20 years younger implementation. Comment: "What learned you have, unlearn you must!"
  • vegardit/bash-funk -- 27K lines (24K LoC) in total. A Bash library. The first commit in May, 2017 (with 10K lines / 8K LoC).
  • Relax-and-Recover -- 35K lines (24K LoC). Backup and restoration tool. First git commit March, 2009 (with 4K lines / 3K LoC)
  • abcde / A Better CD Encoder, used for ripping CDs, weighs in at around 5.5k LoC.
  • thc-segfault -- 3.3K LoC. A pubnix server built mostly using Bash
  • ffmpeg/configure - 8.4K LoC. FFmpeg's configure script is hand-written
  • ffhevc -- 4k LoC. Fully hand-written Bash wrapper script for encoding to HEVC video using FFmpeg and libx265.
  • ffx264 -- 3.9k LoC. Fully hand-written Bash wrapper script for encoding to H.264/AVC video using FFmpeg and libx264.
  • h264enc -- 9.2k LoC. Fully hand-written Bash wrapper script for MEncoder for encoding to H.264/AVC video.
  • bashtop -- 5.3k LoC. A resource monitor
  • halcyon -- 6.6k LoC. A system for installing Haskell apps; hand-written with careful attention to bash semantics and error-checking, in a peculiar style inspired by functional programming.
  • winetricks -- 22K lines of shell script. Installs various Windows programs under Wine
  • wordshell -- ~7k lines of code. Manages multiple WordPress sites from the command-line.
  • BaCon -- ~10k lines of code. Converts programs written in BASIC to C. There are two implementations - one written in BASIC and one as a shell script.
  • FireHOL -- 9k lines of code for the main script, another 3k for the FireQOS tool. FireHOL is a language (and a program to run it) which builds secure, stateful firewalls from easy to understand, human-readable configurations.
  • gxadmin -- 11kLOC is a collection of templated SQL queries and data processing utilities for managing a scientific workflow engine (Galaxy).
  • mulle-bashfunctions -- ~6K lines of code. A function library for bash/zsh programs. Used in mulle-sde a command line IDE, which is another 100K lines of shell scripts (https://github.com/mulle-sde)
  • x11docker -- 11.6k lines of code. Run GUI applications in docker or podman containers.

Shell-Like Languages / DSLs

  • modernish is a portable shell dialect written in shell
  • bats is a DSL for writing tests. Generates bash code.
  • bashible is an Ansible-like DSL in bash. comments
  • clash is an object oriented framework compatible with any modern POSIX shell.
  • bash Infinity is a standard library and a boilerplate framework for bash.

Smaller Programs

  • Alpine, Aboriginal, Debian scripts -- see blog post
  • Completion scripts are big, but often repetitive.
    • _git Zsh completion -- 8.3k lines of code
    • git-completion.bash
    • Docker completion
  • dyne/Tomb is a ~3500 line zsh script.
  • Basalt -- a full-featured package manager in pure Bash (est. ~2021). Although it's only a few thousand lines, there's already a rich ecosystem (15+ apps/libs) that includes many thousand more lines. Some Bash libraries include (at various stages of development):
    • bash-core, a library for enhancing the trap and shopt builtins, adding stacktraces, and many essential amenities
    • bash-object, a library for constructing arbitrarily nested data structures in pure Bash (nearly 200 tests)
    • bash-json, a library for parsing and printing JSON in pure Bash
  • tablespoon/fun/cli-clock - a clock with multiline characters written in bash.
  • json.bash / jb — a command-line tool and bash library that creates JSON (~1700 lines, plus ~3000 lines of tests).

Links

  • OSH "Wild" Tests parse over a million lines of shell. However most of these are small programs and distro package definitions like Alpine PKGBUILD and Gentoo ebuilds, which are repetitive.

  • Shell Programs That Run Under OSH

  • shell script are dangerous The shell is a program to handle your system internally via an interactive console(or not)... It's feature full and extremely dangerous. it's not done to produce applications.