4 điểm bởi GN⁺ 2024-12-09 | 1 bình luận | Chia sẻ qua WhatsApp
  • Chương trình shell lớn nhất thế giới

    • akinomyoga/ble.sh: Tổng cộng 61K LoC (46K SLoC). Đây là Bash Line Editor, một trình chỉnh sửa dòng lệnh tương tác kiểu fish được viết hoàn toàn bằng bash. Tệp chính out/ble.sh chứa 30K LoC (23K SLoC), và tổng thể có hơn 60K LoC. Có rất nhiều chú thích bằng tiếng Nhật. Có phần tổng quan về cách ble.sh hoạt động, cho thấy việc sử dụng các cấu trúc dữ liệu rất tinh vi.

    • kalua: Add-on cho OpenWRT, gồm khoảng 56K SLoC/dòng bằng POSIX shell.

    • bashdb: Trình gỡ lỗi cho bash, gồm khoảng 14K dòng bash. Có một lịch sử triển khai trình gỡ lỗi khá thú vị.

    • drwetter/testssl.sh: Gồm 21K dòng bash trong một tệp duy nhất. Có vẻ được viết thủ công.

    • Simplenetes: Kubernetes được viết bằng 17K dòng Shell. Đáng kinh ngạc, nhưng hiện không còn hoạt động.

    • rkhunter: Trên trang chính thức có 21K dòng Bourne shell, được viết trong giai đoạn 2003-2018.

    • romkatv/powerlevel10k: Thư mục internal/ có 12K dòng script zsh. Ngoài ra còn có thêm 8K dòng cấu hình và script trợ giúp.

    • dylanaraps/neofetch: Hiển thị thông tin hệ thống bằng 10K dòng bash 3.2.

    • xwmx/nb: Bản thân nb có 26K LoC (22K SLoC) bằng bash. Nếu tính thêm các bài kiểm thử bats bằng bash thì có 91K LoC (61K SLoC).

    • distrobox: Gồm hơn 7K dòng script bash. Cho phép dùng bất kỳ bản phân phối Linux nào ngay trong terminal.

    • acme.sh: Script shell dài 7K dòng để cấp và gia hạn chứng chỉ.

    • inxi 2.3.56 [obsolete]: Gồm 16K dòng bash. Bắt đầu như một bản fork của infobash vào năm 2008.

    • bashforth: Gồm khoảng 3800 dòng, nhưng triển khai một ngôn ngữ lập trình thực thụ.

    • yoda: Chỉ bằng một nửa kích thước của bashforth nhưng triển khai đầy đủ cả trình thông dịch lẫn trình biên dịch.

    • vegardit/bash-funk: Thư viện Bash với tổng cộng 27K LoC (24K SLoC).

    • Relax-and-Recover: 35K LoC (24K SLoC). Công cụ sao lưu và khôi phục.

    • abcde / A Better CD Encoder: Dùng để rip CD, gồm khoảng 5.5k LoC.

    • thc-segfault: 3.3K LoC. Máy chủ pubnix được xây dựng chủ yếu bằng Bash.

    • ffmpeg/configure: 8.4K LoC. Script cấu hình của FFmpeg, được viết thủ công.

    • ffhevc: 4k LoC. Script wrapper Bash hoàn toàn viết tay để mã hóa video HEVC bằng FFmpeg và libx265.

    • ffx264: 3.9k LoC. Script wrapper Bash hoàn toàn viết tay để mã hóa video H.264/AVC bằng FFmpeg và libx264.

    • h264enc: 9.2k LoC. Script wrapper Bash hoàn toàn viết tay để mã hóa video H.264/AVC bằng MEncoder.

    • bashtop: 5.3k LoC. Trình giám sát tài nguyên.

    • halcyon: 6.6k LoC. Hệ thống cài đặt ứng dụng Haskell.

    • winetricks: Script shell 22K dòng. Cài đặt nhiều chương trình Windows khác nhau trong Wine.

    • wordshell: Khoảng 7k dòng mã. Quản lý nhiều trang WordPress từ dòng lệnh.

    • BaCon: Khoảng 10k dòng mã. Chuyển đổi các chương trình viết bằng BASIC sang C.

  • Ngôn ngữ giống shell / DSL

    • modernish: Một phương ngữ shell có tính di động, được viết bằng shell.

    • bats: DSL để viết kiểm thử. Tạo ra mã bash.

    • bashible: DSL tương tự Ansible trong bash.

    • clash: Framework hướng đối tượng tương thích với shell POSIX hiện đại.

    • bash Infinity: Thư viện chuẩn và framework boilerplate cho bash.

  • Chương trình nhỏ

    • Alpine, Aboriginal, Debian scripts: Xem bài đăng blog.

    • Completion scripts: Lớn nhưng thường lặp lại.

    • _git Zsh completion: 8.3k dòng mã.

    • git-completion.bash: Hoàn thành lệnh cho Docker.

    • dyne/Tomb: Khoảng 3500 dòng script zsh.

    • Basalt: Trình quản lý gói đầy đủ tính năng được viết hoàn toàn bằng Bash (khoảng năm 2021). Chỉ có vài nghìn dòng nhưng đã có một hệ sinh thái phong phú (hơn 15 ứng dụng/thư viện).

1 bình luận

 
GN⁺ 2024-12-09
Ý kiến trên Hacker News
  • 25 năm trước tại Sony, có người được giao vào một dự án cải thiện hệ thống quản lý đơn hàng rất chậm và hay bị sập.

    • Đó là một hệ thống gồm 50.000 dòng shell script bị bỏ mặc hàng chục năm trên máy chủ AIX.
    • Họ đã dùng Perl để rút gọn hệ thống xuống còn 5.000 dòng và cải thiện hiệu năng lên 10–100 lần.
    • Dự án này là một trải nghiệm rất thỏa mãn.
  • Có người đã viết bộ cài cho Enrust CA và thư mục, rồi nó phát triển đến mức chạy được trên mọi Unix.

    • Việc cài đặt thì đơn giản nhưng nâng cấp lại phức tạp.
    • Các tiện ích trên mỗi Unix hơi khác nhau nên phải quản lý riêng.
    • Unix của DEC gây rối vì các tiện ích dòng lệnh giới hạn độ rộng đầu ra.
    • HP-UX cũng có thay đổi giữa từng phiên bản.
  • Có người từng định viết trình thông dịch cho ngôn ngữ kịch bản Lil bằng bash, nhưng vì phép toán số thực khó xử lý và hỗ trợ mảng hạn chế nên đã chọn AWK.

    • AWK có sẵn trong môi trường POSIX và phù hợp như một ngôn ngữ lập trình tổng quát.
  • Bash script không phù hợp để viết các chương trình phức tạp.

    • Nó khó đọc, quy tắc phạm vi biến khá tinh vi, và xử lý lỗi còn rất thô sơ.
    • Thiếu công cụ phân tích tĩnh, linter và debugger khiến việc bảo trì trở nên khó khăn.
    • Việc kiểm thử phiền phức, và cũng khó xử lý logic phức tạp hay cấu trúc dữ liệu.
    • Bash phù hợp cho tự động hóa đơn giản, nhưng với ứng dụng phức tạp thì ngôn ngữ khác sẽ tốt hơn.
  • Script của rkhunter có mã nguồn tốt và nhiều thông tin.

    • Rất nhiều mã được dùng để bảo đảm các tiện ích hoạt động đúng như mong đợi trên nhiều nền tảng khác nhau.
    • Nếu được viết bằng một ngôn ngữ lập trình phức tạp hơn thì có lẽ nó sẽ kém minh bạch hơn.
  • Chương trình shell lớn nhất từng được ai đó dùng trước đây là abcde, gồm khoảng 5.500 dòng mã.

  • Client FreeBSD Update gồm khoảng 3.600 dòng mã sh.

    • Đây là một công cụ cập nhật hệ điều hành nhưng cung cấp khá nhiều chức năng.
  • Shell có thể là công cụ duy nhất luôn được bảo đảm sẵn có, nhưng khi viết ứng dụng shell lớn thì vẫn nên cân nhắc lại.

  • Script acme.sh dài 7,1K dòng, được dùng để cấp và gia hạn chứng chỉ từ Lets Encrypt.

  • Trong mod_pagespeed, đã từng dùng shell script để chạy kiểm thử hệ thống, nhưng chuyển sang Python có lẽ sẽ tốt hơn.

    • Đã có 10.579 dòng mã bash được sử dụng.
    • Việc chuyển đổi dần dần có lẽ sẽ hiệu quả hơn.