4 पॉइंट द्वारा GN⁺ 2024-12-09 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • दुनिया के सबसे बड़े shell प्रोग्राम

    • akinomyoga/ble.sh: कुल 61K LoC (46K SLoC)। यह Bash Line Editor है, यानी pure bash में लिखा गया fish-जैसा interactive line editor। मुख्य फ़ाइल out/ble.sh में 30K LoC (23K SLoC) हैं, और पूरे प्रोजेक्ट में 60K+ LoC हैं। इसमें जापानी में बहुत सारी टिप्पणियाँ शामिल हैं। ble.sh कैसे काम करता है, इसका एक अवलोकन भी है, जो बहुत परिष्कृत data structures के उपयोग को दिखाता है.

    • kalua: OpenWRT addon, जो लगभग 56K SLoC/lines के POSIX shell से बना है.

    • bashdb: bash debugger, जो लगभग 14K lines के bash से बना है। debugger implementation का एक दिलचस्प इतिहास है.

    • drwetter/testssl.sh: एक single file में 21K lines का bash। लगता है कि यह hand-written है.

    • Simplenetes: 17K lines के Shell से बना Kubernetes। हैरान करने वाला, लेकिन फिलहाल inactive है.

    • rkhunter: आधिकारिक साइट के अनुसार 21K lines का Bourne shell, जिसे 2003-2018 के बीच लिखा गया.

    • romkatv/powerlevel10k: directory internal/ में 12K lines के zsh scripts हैं। इसके अलावा 8K lines के configuration और helper scripts भी हैं.

    • dylanaraps/neofetch: 10K lines का bash 3.2, जो system information दिखाता है.

    • xwmx/nb: nb में खुद 26K LoC (22K SLoC) का bash है। अगर bats tests को भी bash में गिना जाए, तो यह 91K LoC (61K SLoC) तक पहुँचता है.

    • distrobox: 7K+ bash scripts से बना है। terminal के अंदर किसी भी Linux distribution का उपयोग किया जा सकता है.

    • acme.sh: 7K lines की shell script, जो certificates issue और renew करती है.

    • inxi 2.3.56 [obsolete]: 16K lines का bash। 2008 में infobash के fork के रूप में शुरू हुआ.

    • bashforth: लगभग 3800 lines का, लेकिन यह एक वास्तविक programming language implement करता है.

    • yoda: bashforth के आधे आकार का, लेकिन पूरा interpreter और compiler implement करता है.

    • vegardit/bash-funk: कुल 27K LoC (24K SLoC) की Bash library.

    • Relax-and-Recover: 35K LoC (24K SLoC)। backup और recovery tool.

    • abcde / A Better CD Encoder: CD ripping के लिए इस्तेमाल होता है, और लगभग 5.5k LoC का है.

    • thc-segfault: 3.3K LoC। मुख्य रूप से Bash से बना pubnix server.

    • ffmpeg/configure: 8.4K LoC। FFmpeg की configuration script, जो hand-written है.

    • ffhevc: 4k LoC। FFmpeg और libx265 का उपयोग करके HEVC video में encode करने के लिए पूरी तरह hand-written Bash wrapper script.

    • ffx264: 3.9k LoC। FFmpeg और libx264 का उपयोग करके H.264/AVC video में encode करने के लिए पूरी तरह hand-written Bash wrapper script.

    • h264enc: 9.2k LoC। MEncoder का उपयोग करके H.264/AVC video में encode करने के लिए पूरी तरह hand-written Bash wrapper script.

    • bashtop: 5.3k LoC। resource monitor.

    • halcyon: 6.6k LoC। Haskell app installation system.

    • winetricks: 22K lines की shell script। Wine पर विभिन्न Windows programs install करती है.

    • wordshell: लगभग 7k lines का code। command line से कई WordPress sites manage करता है.

    • BaCon: लगभग 10k lines का code। BASIC में लिखे programs को C में convert करता है.

  • shell-जैसी भाषाएँ / DSL

    • modernish: shell में लिखा गया portable shell dialect.

    • bats: tests लिखने के लिए DSL। यह bash code generate करता है.

    • bashible: bash में Ansible-जैसा DSL.

    • clash: modern POSIX shell के साथ compatible object-oriented framework.

    • bash Infinity: bash के लिए standard library और boilerplate framework.

  • छोटे प्रोग्राम

    • Alpine, Aboriginal, Debian scripts: blog post देखें.

    • Completion scripts: बड़े होते हैं, लेकिन अक्सर repetitive होते हैं.

    • _git Zsh completion: 8.3k lines का code.

    • git-completion.bash: Docker completion.

    • dyne/Tomb: लगभग 3500 lines की zsh script.

    • Basalt: pure Bash में लिखा गया full-featured package manager (लगभग 2021)। यह केवल कुछ हज़ार lines का है, लेकिन इसका ecosystem पहले से ही काफ़ी समृद्ध है (15+ apps/libraries).

1 टिप्पणियां

 
GN⁺ 2024-12-09
Hacker News राय
  • Sony में 25 साल पहले, एक बहुत धीमे और बार-बार क्रैश होने वाले ऑर्डर मैनेजमेंट सिस्टम को सुधारने वाले प्रोजेक्ट पर नियुक्त किया गया था।

    • यह AIX सर्वर पर दशकों से उपेक्षित 50,000 लाइनों के shell script से बना सिस्टम था।
    • Perl का उपयोग करके सिस्टम को 5,000 लाइनों तक घटाया गया और प्रदर्शन 10-100 गुना बेहतर किया गया।
    • यह प्रोजेक्ट बहुत संतोषजनक अनुभव था.
  • Enrust CA और directory installer लिखा था, और वह विकसित होकर सभी Unix पर चलने लगा।

    • इंस्टॉलेशन सरल था, लेकिन upgrade जटिल था।
    • हर Unix की utility थोड़ी अलग थी, इसलिए उनका प्रबंधन करना पड़ता था।
    • DEC के Unix में command-line utility output width को सीमित कर देती थीं, जिससे काफी भ्रम होता था।
    • HP-UX में हर version के साथ बदलाव होते थे.
  • scripting language Lil के लिए bash में interpreter लिखने की कोशिश की गई, लेकिन floating-point arithmetic की कठिनाइयों और सीमित array support के कारण AWK चुना गया।

    • AWK POSIX environment में उपलब्ध था और एक सामान्य-उद्देश्य language के रूप में उपयुक्त था.
  • Bash script जटिल प्रोग्राम लिखने के लिए उपयुक्त नहीं है।

    • इसकी readability कम होती है, variable scope rules सूक्ष्म होते हैं, और error handling बहुत आदिम है।
    • static analysis tools, linter, और debugger की कमी से maintenance कठिन हो जाता है।
    • testing झंझटभरी होती है, और जटिल logic या data structure को संभालना मुश्किल होता है।
    • Bash सरल automation के लिए ठीक है, लेकिन जटिल application के लिए दूसरी language बेहतर होती है.
  • rkhunter script का code अच्छा है और उसमें बहुत जानकारी है।

    • कई platforms पर utility अपेक्षित तरीके से काम करे, यह सुनिश्चित करने में काफी code इस्तेमाल होता है।
    • अगर इसे किसी अधिक जटिल programming language में लिखा गया होता, तो यह कम पारदर्शी होता.
  • अब तक इस्तेमाल किया गया सबसे बड़ा shell program abcde था, जो लगभग 5500 लाइनों के code से बना था.

  • FreeBSD Update client लगभग 3600 लाइनों के sh code से बना है।

    • operating system को update करने वाले tool के रूप में यह काफी functionality प्रदान करता है.
  • shell शायद एकमात्र ऐसा tool हो सकता है जिसकी availability सुनिश्चित हो, लेकिन बड़े shell app लिखते समय दोबारा सोचना चाहिए.

  • acme.sh script 7.1K लाइनों का है, और Lets Encrypt से certificate जारी करने और renew करने में उपयोग होता है.

  • mod_pagespeed में shell script का उपयोग करके system test किए गए थे, लेकिन Python पर switch करना बेहतर होता।

    • इसमें 10,579 लाइनों का bash code इस्तेमाल हुआ था।
    • इसे धीरे-धीरे migrate करना अधिक कुशल होता.