4P by neo 1달전 | ★ favorite | 댓글 1개
  • 세계에서 가장 큰 쉘 프로그램

    • 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 코드가 사용되었음.
    • 점진적으로 전환하는 것이 더 효율적이었을 것임.