最大規模のShellプログラム
(github.com/oils-for-unix)-
世界最大のシェルプログラム
-
akinomyoga/ble.sh: 合計61K LoC(46K SLoC)。Bash Line Editorであり、純粋な bash で書かれた fish 風のインタラクティブな行エディタ。主要ファイル
out/ble.shは30K LoC(23K SLoC)を含み、全体では60K+ LoCがある。日本語のコメントが多数含まれている。ble.sh の動作方法に関する概要があり、非常に洗練されたデータ構造の使用を示している。 -
kalua: OpenWRT アドオンで、約56K SLoC/行の POSIX シェルで構成されている。
-
bashdb: bash デバッガで、約14K 行の bash で構成されている。デバッガ実装の興味深い歴史を持つ。
-
drwetter/testssl.sh: 単一ファイルに21K 行の bash で構成されている。手作業で書かれたように見える。
-
Simplenetes: 17K 行の Shell で構成された Kubernetes。驚くべきことに、現在は非アクティブ状態。
-
rkhunter: 公式サイトでは、2003年から2018年の間に書かれた21K 行の Bourne シェル。
-
romkatv/powerlevel10k: ディレクトリ
internal/に12K 行の zsh スクリプトがある。さらに8K 行の設定および補助スクリプトがある。 -
dylanaraps/neofetch: 10K 行の bash 3.2 でシステム情報を表示する。
-
xwmx/nb: nb 自体に26K LoC(22K SLoC)の bash がある。さらに bats テストを bash として数えると、91K LoC(61K SLoC)がある。
-
distrobox: 7K 以上の bash スクリプトで構成されている。ターミナル内であらゆる Linux ディストリビューションを使える。
-
acme.sh: 7K 行のシェルスクリプトで、証明書を発行および更新する。
-
inxi 2.3.56 [obsolete]: 16K 行の bash で構成されている。2008年に infobash のフォークとして始まった。
-
bashforth: 約3800行で構成されているが、実際のプログラミング言語を実装している。
-
yoda: bashforth の半分の規模だが、完全なインタプリタとコンパイラを実装している。
-
vegardit/bash-funk: 合計27K LoC(24K SLoC)の Bash ライブラリ。
-
Relax-and-Recover: 35K LoC(24K SLoC)。バックアップおよび復元ツール。
-
abcde / A Better CD Encoder: CD リッピングに使われ、約5.5k LoCで構成されている。
-
thc-segfault: 3.3K LoC。主に Bash で構築された pubnix サーバー。
-
ffmpeg/configure: 8.4K LoC。FFmpeg の設定スクリプトで、手作業で書かれている。
-
ffhevc: 4k LoC。FFmpeg および libx265 を使って HEVC 動画へエンコードするための、完全に手作業の Bash ラッパースクリプト。
-
ffx264: 3.9k LoC。FFmpeg および libx264 を使って H.264/AVC 動画へエンコードするための、完全に手作業の Bash ラッパースクリプト。
-
h264enc: 9.2k LoC。MEncoder を使って H.264/AVC 動画へエンコードするための、完全に手作業の Bash ラッパースクリプト。
-
bashtop: 5.3k LoC。リソースモニタ。
-
halcyon: 6.6k LoC。Haskell アプリのインストールシステム。
-
winetricks: 22K 行のシェルスクリプト。Wine でさまざまな Windows プログラムをインストールする。
-
wordshell: 約7k 行のコード。コマンドラインから複数の WordPress サイトを管理する。
-
BaCon: 約10k 行のコード。BASIC で書かれたプログラムを C に変換する。
-
-
シェル系言語 / DSL
-
modernish: シェルで書かれた移植可能なシェル方言。
-
bats: テストを書くための DSL。bash コードを生成する。
-
bashible: bash における Ansible 風 DSL。
-
clash: 現代的な POSIX シェルと互換性のあるオブジェクト指向フレームワーク。
-
bash Infinity: bash のための標準ライブラリおよびボイラープレートフレームワーク。
-
-
小さなプログラム
-
Alpine, Aboriginal, Debian scripts: ブログ記事を参照。
-
Completion scripts: 大きいが、しばしば反復的。
-
_git Zsh completion: 8.3k 行のコード。
-
git-completion.bash: Docker completion.
-
dyne/Tomb: 約3500行の zsh スクリプト。
-
Basalt: 純粋な Bash で書かれたフル機能のパッケージマネージャ(およそ2021年)。わずか数千行にすぎないが、すでに豊かなエコシステム(15以上のアプリ/ライブラリ)がある。
-
1件のコメント
Hacker Newsのコメント
Sonyで25年前、非常に遅く頻繁にダウンする受注管理システムを改善するプロジェクトに配属された。
Enrust CAとディレクトリのインストーラーを書き、あらゆるUnixで動作するように発展させた。
スクリプト言語Lilのインタープリタをbashで書こうとしたが、浮動小数点演算の難しさと配列サポートの限定性からAWKを選んだ。
Bashスクリプトは複雑なプログラムを書くのに向いていない。
rkhunterのスクリプトはコードが良く、情報量も豊富だ。
過去に使った中で最大のシェルプログラムはabcdeで、約5500行のコードで構成されていた。
FreeBSD Updateクライアントは約3600行のshコードで構成されている。
シェルは利用可能であることが保証された唯一のツールかもしれないが、大きなシェルアプリを書くときは再考する必要がある。
acme.shスクリプトは7.1K行で、Let's Encryptで証明書を発行・更新するために使われている。
mod_pagespeedではシェルスクリプトを使ってシステムテストを行っていたが、Pythonに切り替えたほうがよかっただろう。