# 최대 규모의 Shell 프로그램

> Clean Markdown view of GeekNews topic #18160. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18160](https://news.hada.io/topic?id=18160)
- GeekNews Markdown: [https://news.hada.io/topic/18160.md](https://news.hada.io/topic/18160.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-12-09T11:05:20+09:00
- Updated: 2024-12-09T11:05:20+09:00
- Original source: [github.com/oils-for-unix](https://github.com/oils-for-unix/oils/wiki/The-Biggest-Shell-Programs-in-the-World)
- Points: 4
- Comments: 1

## Topic Body

- # 세계에서 가장 큰 쉘 프로그램

  - **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개 이상의 앱/라이브러리)가 있음.

## Comments



### Comment 32145

- Author: neo
- Created: 2024-12-09T11:05:20+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42346274) 
- 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 코드가 사용되었음.  
  - 점진적으로 전환하는 것이 더 효율적이었을 것임.
