GN⁺: 최대 규모의 Shell 프로그램
(github.com/oils-for-unix)-
세계에서 가장 큰 쉘 프로그램
-
akinomyoga/ble.sh: 총 61K LoC (46K SLoC). Bash Line Editor로, 순수 bash로 작성된 fish-like 인터랙티브 라인 편집기임. 주요 파일 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: 공식 사이트에서 21K 라인의 Bourne 쉘로 2003-2018년 사이에 작성됨.
-
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 스크립트로 구성됨. 터미널 내에서 어떤 리눅스 배포판도 사용할 수 있음.
-
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개 이상의 앱/라이브러리)가 있음.
-
Hacker News 의견
-
Sony에서 25년 전, 매우 느리고 자주 다운되는 주문 관리 시스템을 개선하는 프로젝트에 배정받았음.
- AIX 서버에서 수십 년 동안 방치된 50,000줄의 셸 스크립트로 구성된 시스템이었음.
- Perl을 사용하여 시스템을 5,000줄로 줄이고 성능을 10-100배 향상시켰음.
- 이 프로젝트는 매우 만족스러운 경험이었음.
-
Enrust CA와 디렉토리 설치 프로그램을 작성했으며, 모든 Unix에서 실행되도록 발전했음.
- 설치는 간단했지만, 업그레이드는 복잡했음.
- 각 Unix의 유틸리티가 약간씩 달라서 관리가 필요했음.
- DEC의 Unix는 명령줄 유틸리티가 출력 폭을 제한하는 등 혼란스러웠음.
- HP-UX는 버전마다 변경 사항이 있었음.
-
스크립팅 언어 Lil을 bash로 해석기를 작성하려 했으나, 부동 소수점 연산의 어려움과 제한된 배열 지원으로 AWK를 선택했음.
- AWK는 POSIX 환경에서 사용 가능하고, 일반적인 언어로 적합했음.
-
Bash 스크립트는 복잡한 프로그램 작성에 적합하지 않음.
- 가독성이 떨어지고, 변수 범위 규칙이 미묘하며, 오류 처리가 원시적임.
- 정적 분석 도구, 린터, 디버거가 부족하여 유지보수가 어려움.
- 테스트가 번거롭고, 복잡한 논리나 데이터 구조를 다루기 어려움.
- Bash는 간단한 자동화에 적합하지만, 복잡한 애플리케이션에는 다른 언어가 더 나음.
-
rkhunter 스크립트는 코드가 좋고 정보가 풍부함.
- 다양한 플랫폼에서 유틸리티가 예상대로 작동하도록 보장하는 데 많은 코드가 사용됨.
- 복잡한 프로그래밍 언어로 작성되었다면 덜 투명했을 것임.
-
과거에 사용한 가장 큰 셸 프로그램은 abcde로, 약 5500줄의 코드로 구성됨.
-
FreeBSD Update 클라이언트는 약 3600줄의 sh 코드로 구성됨.
- 운영 체제를 업데이트하는 도구로서 상당한 기능을 제공함.
-
셸은 가용성이 보장되는 유일한 도구일 수 있지만, 큰 셸 앱을 작성할 때는 재고할 필요가 있음.
-
acme.sh 스크립트는 7.1K 줄로, Lets Encrypt에서 인증서를 발급하고 갱신하는 데 사용됨.
-
mod_pagespeed에서 셸 스크립트를 사용하여 시스템 테스트를 수행했으나, Python으로 전환하는 것이 더 나았을 것임.
- 10,579줄의 bash 코드가 사용되었음.
- 점진적으로 전환하는 것이 더 효율적이었을 것임.