GN⁺ 2024-12-09 | parent | ★ favorite | on: 최대 규모의 Shell 프로그램(github.com/oils-for-unix)
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 코드가 사용되었음.
    • 점진적으로 전환하는 것이 더 효율적이었을 것임.