- 이 위키는 단순히 긴 스크립트가 아니라, 손으로 작성되고 자료구조와 알고리듬까지 활용하는 “실질적인” Shell 프로그램을 모은 목록임
- 기준은 대체로 5K 라인 이상이며, 자동 생성 스크립트나 반복적인 completion 스크립트는 핵심 사례에서 제외됨
- 대표 사례는 ble.sh 87K 라인, kalua 약 56K SLoC/라인, Relax-and-Recover 35K 라인, nb 26K 라인, winetricks 22K 라인처럼 일반적인 Shell 스크립트 인식을 크게 넘어섬
- 목록에는 대화형 라인 에디터, OpenWRT 애드온, Bash 디버거, TLS 테스트 도구, Kubernetes 구현, 백업·복구 도구, 인증서 발급 도구, 리소스 모니터 등 실사용 도구가 폭넓게 포함됨
- OSH “Wild” 테스트는 백만 라인 이상의 Shell을 파싱하지만, 대부분은 작은 프로그램과 반복적인 배포판 패키지 정의라 대형 Shell 프로그램과 구분됨
무엇을 “큰 Shell 프로그램”으로 보는가
- 여기서 “biggest”는 단순한 원시 라인 수보다 “substantial”, 즉 실질적인 규모와 복잡도를 뜻함
- 포함 대상은 기본적으로 손으로 작성된 Shell 스크립트임
- autoconf가 생성한 큰 스크립트는 예외로 둠
- 70K 라인의 coreutils 스크립트 같은 자동 생성물은 실질적인 의미의 대형 Shell 프로그램으로 보지 않음
- 자료구조와 알고리듬을 쓰는 Shell 프로그램을 특히 중시함
- bash-completion은 정교하지만, Unix 머신의 각 명령마다 비교적 단순한 함수를 두는 반복적 구조라 반례에 가까움
- 대략적인 기준선은 5K 라인 초과임
- 반복적이지 않은 가장 큰 Shell 프로그램은 대체로 10K+ 라인 범위에 있음
- 100K 라인을 넘는 프로그램은 확인하지 못한 상태임
가장 큰 Shell 프로그램 사례
- akinomyoga/ble.sh: 총 87K 라인, 주석 제외 63K LoC
- 순수 bash로 작성된 fish 같은 대화형 라인 에디터임
- 메인 파일
out/ble.sh는 39K 라인, 주석 제외 29K LoC이며, 모듈 파일까지 합치면 총 80K+ 라인임 - 일본어 주석이 많음
bind -x로 터미널의 raw bytes를 읽고, 여러 명시적 상태 머신으로 직접 디코딩하며, drawing buffer를 유지·갱신함- timing과 “fibers”도 포함함
- Shell parser 관련 상세 내용은 issue 663 댓글에 있으며, Shell에서 자료구조를 가장 정교하게 쓴 사례 중 하나로 평가됨
- OSH에서 실행하려는 시도가 있고 대부분 파싱됨
- 첫 커밋은 2015년에 8K 라인 / 6K LoC였으며, 실제 개발은 2013년에 시작됨
- kalua: OpenWRT 애드온으로, 약 56K SLoC/라인의 POSIX shell로 작성됨
- Relax-and-Recover: 35K 라인, 24K LoC의 백업·복구 도구임
- 첫 git 커밋은 2009년 3월이며 당시 4K 라인 / 3K LoC였음
- xwmx/nb:
nb자체가 26K 라인, 22K LoC의 bash로 작성됨- bats 테스트를 bash로 계산하면 추가로 91K 라인, 61K LoC가 있음
- 첫 커밋은 2014년이고, 활발한 커밋 이력은 2016년 초부터 시작됨
- vegardit/bash-funk: 총 27K 라인, 24K LoC의 Bash 라이브러리임
- 첫 커밋은 2017년 5월이며 당시 10K 라인 / 8K LoC였음
- winetricks: 22K 라인의 Shell 스크립트이며 Wine 아래에 여러 Windows 프로그램을 설치함
- drwetter/testssl.sh: 단일 파일에 21K 라인의 bash가 들어 있음
- 손으로 작성된 것으로 보임
- 2006년에 몇 개의
openssl명령으로 시작함 - 파싱 중 issue #606에 걸림
- rkhunter: 2003년부터 2018년까지 작성된 21K 라인의 Bourne shell 프로그램임
- 공식 사이트는 rkhunter.sourceforge.net임
- Simplenetes: “Kubernetes in 17K lines of Shell”로 소개됨
- 놀라운 사례로 표시되어 있지만 dormant 상태로 보임
- 관련 Hacker News Thread가 연결됨
- inxi 2.3.56: obsolete로 표시된 16K 라인의 bash 프로그램임
- 2008년에
infobash에서 fork됨 - 당시
infobash는 889 라인이었고,infobash는 2005년에 시작됨 - v2.9부터
inxi는 Perl 구현으로 대체됨
- 2008년에
- bashdb: Bash 디버거이며 약 14K 라인의 bash로 작성됨
- 관련 배경으로 Implementing Debuggers가 연결됨
- romkatv/powerlevel10k:
internal/디렉터리에 12K 라인의 zsh 스크립트가 있음- 추가로 config와 helper script가 8K 라인 있음
- 첫 커밋은 2014년임
- dylanaraps/neofetch: Bash 3.2로 작성된 10K 라인 프로그램이며 시스템 정보를 표시함
- 이미지와 관련된 흥미로운 기능도 할 수 있음
- 첫 커밋은 2015년임
- distrobox: 7K 라인 이상의 bash 스크립트로, 터미널 안에서 어떤 Linux 배포판이든 사용할 수 있게 함
- acme.sh: 8K 라인의 Shell 스크립트이며 인증서를 발급하고 갱신함
규모는 작아도 눈에 띄는 구현
- bashforth: 약 3,800 라인으로 아주 크지는 않지만 실제 프로그래밍 언어를 구현함
- 공백과 주석이 많음
- yoda: bashforth의 절반 정도 크기지만 인터프리터와 컴파일러 전체를 구현함
- 같은 작성자의 20년 더 젊은 구현으로, 더 많은 기능을 담고 있음
- “What learned you have, unlearn you must!”라는 코멘트가 붙어 있음
그 밖의 주요 Shell 프로그램
- abcde / A Better CD Encoder: CD ripping에 쓰이며 약 5.5K LoC임
- thc-segfault: 3.3K LoC이며 대부분 Bash로 만든 pubnix 서버임
- ffmpeg/configure: FFmpeg의 손으로 작성된 configure 스크립트이며 8.4K LoC임
- ffhevc: FFmpeg와 libx265로 HEVC 비디오를 인코딩하는 완전 수작성 Bash wrapper이며 4K LoC임
- ffx264: FFmpeg와 libx264로 H.264/AVC 비디오를 인코딩하는 완전 수작성 Bash wrapper이며 3.9K LoC임
- h264enc: MEncoder로 H.264/AVC 비디오를 인코딩하는 완전 수작성 Bash wrapper이며 9.2K LoC임
- bashtop: 5.3K LoC의 리소스 모니터임
- halcyon: Haskell 앱 설치 시스템이며 6.6K LoC임
- bash semantics와 오류 검사에 주의를 기울인 수작성 코드이며, 함수형 프로그래밍에서 영감을 받은 독특한 스타일임
- wordshell: 약 7K 라인의 코드로, 명령줄에서 여러 WordPress 사이트를 관리함
- BaCon: 약 10K 라인이며 BASIC으로 작성된 프로그램을 C로 변환함
- BASIC 구현과 Shell 스크립트 구현 두 가지가 있음
- FireHOL: 메인 스크립트가 9K 라인, FireQOS 도구가 추가로 3K 라인임
- 사람이 읽기 쉬운 설정에서 secure, stateful firewall을 만드는 언어이자 실행 프로그램임
- gxadmin: 11K LoC이며 과학 워크플로 엔진 Galaxy 관리를 위한 templated SQL query와 데이터 처리 유틸리티 모음임
- mulle-bashfunctions: 약 6K 라인의 bash/zsh용 함수 라이브러리임
mulle-sde에서 사용되며,mulle-sde는 또 다른 100K 라인의 Shell 스크립트임
- x11docker: 11.6K 라인이며 docker 또는 podman 컨테이너에서 GUI 애플리케이션을 실행함
Shell 유사 언어와 DSL
- modernish: Shell로 작성된 portable shell dialect임
- bats: 테스트 작성을 위한 DSL이며 bash 코드를 생성함
- bashible: bash로 작성된 Ansible 유사 DSL임
- 관련 comments가 연결됨
- clash: 모든 현대적 POSIX shell과 호환되는 객체지향 프레임워크임
- bash Infinity: bash용 표준 라이브러리와 boilerplate 프레임워크임
더 작은 프로그램과 관련 생태계
- Alpine, Aboriginal, Debian 스크립트는 별도 blog post로 연결됨
- completion 스크립트는 크지만 종종 반복적임
- _git Zsh completion은 8.3K 라인의 코드임
git-completion.bash와 Docker completion도 예로 듦
- dyne/Tomb: 약 3,500 라인의 zsh 스크립트임
- Basalt: 순수 Bash로 작성된 full-featured package manager임
- 몇천 라인 규모지만, 15개 이상의 앱과 라이브러리를 포함한 rich ecosystem이 있음
- bash-core:
trap과shoptbuiltin을 확장하고 stacktrace와 필수 편의 기능을 추가하는 라이브러리임 - bash-object: 순수 Bash로 임의 중첩 자료구조를 구성하는 라이브러리이며 테스트가 거의 200개 있음
- bash-json: 순수 Bash로 JSON을 파싱하고 출력하는 라이브러리임
- tablespoon/fun/cli-clock: bash로 작성된 여러 줄 문자 시계임
- json.bash / jb: JSON을 만드는 명령줄 도구이자 bash 라이브러리임
- 약 1,700 라인이며 테스트가 약 3,000 라인 있음
OSH 테스트와 Shell 사용상의 주의점
- OSH "Wild" Tests는 백만 라인 이상의 Shell을 파싱함
- 대부분은 작은 프로그램과 Alpine
PKGBUILD, Gentooebuild같은 반복적인 배포판 패키지 정의임
- 대부분은 작은 프로그램과 Alpine
- Shell Programs That Run Under OSH는 OSH에서 실행되는 Shell 프로그램 목록으로 연결됨
- shell script are dangerous는 Shell이 시스템 내부를 대화형 콘솔 또는 비대화형으로 다루는 프로그램이며, 기능이 많고 매우 위험하고 애플리케이션 제작용으로 만들어진 것이 아니라고 경고함