4 คะแนน โดย GN⁺ 2024-12-09 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • โปรแกรมเชลล์ที่ใหญ่ที่สุดในโลก

    • akinomyoga/ble.sh: รวม 61K LoC (46K SLoC) เป็น Bash Line Editor หรือโปรแกรมแก้ไขบรรทัดแบบโต้ตอบสไตล์ fish ที่เขียนด้วย bash ล้วน ๆ ไฟล์หลัก out/ble.sh มี 30K LoC (23K SLoC) และทั้งโปรเจกต์มีมากกว่า 60K+ LoC มีคอมเมนต์ภาษาญี่ปุ่นจำนวนมาก รวมถึงมีภาพรวมของวิธีการทำงานของ ble.sh ซึ่งแสดงให้เห็นการใช้โครงสร้างข้อมูลที่ซับซ้อนมาก

    • kalua: ส่วนเสริมของ OpenWRT ที่ประกอบด้วย POSIX shell ราว 56K SLoC/บรรทัด

    • bashdb: ดีบักเกอร์สำหรับ bash ที่ประกอบด้วย bash ราว 14K บรรทัด และมีประวัติการพัฒนาดีบักเกอร์ที่น่าสนใจ

    • drwetter/testssl.sh: ประกอบด้วย bash 21K บรรทัดในไฟล์เดียว ดูเหมือนจะเขียนด้วยมือทั้งหมด

    • Simplenetes: Kubernetes ที่เขียนด้วย Shell 17K บรรทัด น่าทึ่งแต่ตอนนี้ไม่มีการพัฒนาแล้ว

    • rkhunter: บนเว็บไซต์ทางการระบุว่าเป็น Bourne shell 21K บรรทัด เขียนขึ้นในช่วงปี 2003-2018

    • romkatv/powerlevel10k: ในไดเรกทอรี internal/ มีสคริปต์ zsh 12K บรรทัด และยังมีสคริปต์ตั้งค่าและสคริปต์ช่วยเหลืออีก 8K บรรทัด

    • dylanaraps/neofetch: ใช้ bash 3.2 จำนวน 10K บรรทัดเพื่อแสดงข้อมูลระบบ

    • xwmx/nb: ตัว nb เองมี bash 26K LoC (22K SLoC) และหากนับการทดสอบ bats เป็น bash ด้วย จะมี 91K LoC (61K SLoC)

    • distrobox: ประกอบด้วยสคริปต์ bash มากกว่า 7K บรรทัด ทำให้สามารถใช้ลินุกซ์ดิสทริบิวชันใดก็ได้ภายในเทอร์มินัล

    • acme.sh: สคริปต์เชลล์ 7K บรรทัดสำหรับออกและต่ออายุใบรับรอง

    • inxi 2.3.56 [obsolete]: ประกอบด้วย bash 16K บรรทัด เริ่มต้นในปี 2008 ในฐานะ fork ของ infobash

    • bashforth: มีประมาณ 3800 บรรทัด แต่สามารถใช้งานเป็นภาษาโปรแกรมจริงได้

    • yoda: มีขนาดเพียงครึ่งหนึ่งของ bashforth แต่มีทั้งอินเทอร์พรีเตอร์และคอมไพเลอร์ครบถ้วน

    • vegardit/bash-funk: ไลบรารี Bash ขนาดรวม 27K LoC (24K SLoC)

    • Relax-and-Recover: 35K LoC (24K SLoC) เครื่องมือสำรองและกู้คืนข้อมูล

    • abcde / A Better CD Encoder: ใช้สำหรับริป CD และมีขนาดประมาณ 5.5k LoC

    • thc-segfault: 3.3K LoC เซิร์ฟเวอร์ pubnix ที่สร้างขึ้นด้วย Bash เป็นหลัก

    • ffmpeg/configure: 8.4K LoC สคริปต์ตั้งค่าของ FFmpeg ที่เขียนด้วยมือทั้งหมด

    • ffhevc: 4k LoC สคริปต์ wrapper ของ Bash ที่เขียนด้วยมือทั้งหมด สำหรับเข้ารหัสวิดีโอ HEVC โดยใช้ FFmpeg และ libx265

    • ffx264: 3.9k LoC สคริปต์ wrapper ของ Bash ที่เขียนด้วยมือทั้งหมด สำหรับเข้ารหัสวิดีโอ H.264/AVC โดยใช้ FFmpeg และ libx264

    • h264enc: 9.2k LoC สคริปต์ wrapper ของ Bash ที่เขียนด้วยมือทั้งหมด สำหรับเข้ารหัสวิดีโอ H.264/AVC โดยใช้ MEncoder

    • bashtop: 5.3k LoC ตัวตรวจสอบทรัพยากรระบบ

    • halcyon: 6.6k LoC ระบบติดตั้งแอป Haskell

    • winetricks: สคริปต์เชลล์ 22K บรรทัด สำหรับติดตั้งโปรแกรม Windows หลากหลายตัวบน Wine

    • wordshell: โค้ดราว 7k บรรทัด สำหรับจัดการหลายไซต์ WordPress จากบรรทัดคำสั่ง

    • BaCon: โค้ดราว 10k บรรทัด สำหรับแปลงโปรแกรมที่เขียนด้วย BASIC ให้เป็น C

  • ภาษาคล้ายเชลล์ / DSL

    • modernish: ภาษาถิ่นของเชลล์แบบพกพาที่เขียนด้วยเชลล์

    • bats: DSL สำหรับเขียนเทสต์ ซึ่งสร้างโค้ด bash

    • bashible: DSL ใน bash ที่คล้ายกับ Ansible

    • clash: เฟรมเวิร์กเชิงวัตถุที่เข้ากันได้กับ POSIX shell สมัยใหม่

    • bash Infinity: ไลบรารีมาตรฐานและเฟรมเวิร์ก boilerplate สำหรับ bash

  • โปรแกรมขนาดเล็ก

    • Alpine, Aboriginal, Debian scripts: ดูโพสต์ในบล็อกอ้างอิง

    • Completion scripts: มีขนาดใหญ่ แต่บ่อยครั้งก็ซ้ำ ๆ กัน

    • _git Zsh completion: โค้ด 8.3k บรรทัด

    • git-completion.bash: Docker completion

    • dyne/Tomb: สคริปต์ zsh ราว 3500 บรรทัด

    • Basalt: ตัวจัดการแพ็กเกจที่ทำงานได้ครบถ้วน เขียนด้วย Bash ล้วน (ประมาณปี 2021) แม้มีเพียงไม่กี่พันบรรทัด แต่ก็มี ecosystem ที่อุดมสมบูรณ์แล้ว (แอป/ไลบรารีมากกว่า 15 รายการ)

1 ความคิดเห็น

 
GN⁺ 2024-12-09
ความคิดเห็นจาก Hacker News
  • เมื่อ 25 ปีก่อน ที่ Sony มีคนถูกมอบหมายให้ทำโปรเจ็กต์ปรับปรุงระบบจัดการคำสั่งซื้อที่ช้ามากและล่มบ่อย

    • มันเป็นระบบที่ประกอบด้วยเชลล์สคริปต์ 50,000 บรรทัดบนเซิร์ฟเวอร์ AIX ซึ่งถูกปล่อยทิ้งไว้เป็นเวลาหลายสิบปี
    • จากนั้นได้ใช้ Perl ลดระบบลงเหลือ 5,000 บรรทัด และเพิ่มประสิทธิภาพได้ 10-100 เท่า
    • โปรเจ็กต์นี้เป็นประสบการณ์ที่น่าพอใจมาก
  • เคยเขียนตัวติดตั้งสำหรับ Enrust CA และไดเรกทอรี ซึ่งต่อมาพัฒนาให้รันได้บน Unix ทุกตัว

    • การติดตั้งนั้นง่าย แต่การอัปเกรดซับซ้อน
    • ยูทิลิตีของ Unix แต่ละตัวแตกต่างกันเล็กน้อย จึงต้องมีโค้ดไว้จัดการ
    • Unix ของ DEC ชวนปวดหัว เช่น ยูทิลิตีบรรทัดคำสั่งจำกัดความกว้างของเอาต์พุต
    • HP-UX ก็มีการเปลี่ยนแปลงในแต่ละเวอร์ชัน
  • เคยพยายามเขียนอินเทอร์พรีเตอร์ของภาษาเขียนสคริปต์ Lil ด้วย bash แต่เลือก AWK เพราะการคำนวณเลขทศนิยมทำได้ยากและรองรับอาร์เรย์ได้จำกัด

    • AWK ใช้งานได้ในสภาพแวดล้อม POSIX และเหมาะในฐานะภาษาทั่วไป
  • Bash script ไม่เหมาะกับการเขียนโปรแกรมที่ซับซ้อน

    • อ่านยาก กฎเรื่องขอบเขตตัวแปรมีความละเอียดอ่อน และการจัดการข้อผิดพลาดยังพื้นฐานมาก
    • ขาดเครื่องมือวิเคราะห์แบบสถิต, linter และ debugger ทำให้ดูแลรักษายาก
    • การทดสอบก็ยุ่งยาก และรับมือกับตรรกะซับซ้อนหรือโครงสร้างข้อมูลได้ไม่ดี
    • Bash เหมาะกับงานอัตโนมัติแบบง่าย แต่สำหรับแอปพลิเคชันที่ซับซ้อน ภาษาอื่นจะเหมาะกว่า
  • สคริปต์ rkhunter มีโค้ดที่ดีและให้ข้อมูลมาก

    • โค้ดจำนวนมากถูกใช้เพื่อให้มั่นใจว่ายูทิลิตีทำงานได้ตามคาดบนหลายแพลตฟอร์ม
    • ถ้าเขียนด้วยภาษาที่ซับซ้อนกว่านี้ มันคงโปร่งใสน้อยลง
  • โปรแกรมเชลล์ที่ใหญ่ที่สุดที่เคยใช้ในอดีตคือ abcde ซึ่งมีโค้ดประมาณ 5,500 บรรทัด

  • ไคลเอนต์ FreeBSD Update มีโค้ด sh ราว 3,600 บรรทัด

    • ในฐานะเครื่องมืออัปเดตระบบปฏิบัติการ มันมีความสามารถค่อนข้างมาก
  • เชลล์อาจเป็นเครื่องมือเดียวที่มั่นใจได้ว่ามีใช้งาน แต่ถ้าจะเขียนแอปเชลล์ขนาดใหญ่ ก็ควรคิดให้รอบคอบ

  • สคริปต์ acme.sh มี 7.1K บรรทัด ใช้สำหรับออกและต่ออายุใบรับรองจาก Lets Encrypt

  • เคยใช้เชลล์สคริปต์ใน mod_pagespeed เพื่อทดสอบระบบ แต่การเปลี่ยนไปใช้ Python น่าจะดีกว่า

    • ใช้โค้ด bash 10,579 บรรทัด
    • ถ้าค่อย ๆ ย้ายทีละส่วนก็น่าจะมีประสิทธิภาพกว่า