4 puan yazan GN⁺ 2024-12-09 | 1 yorum | WhatsApp'ta paylaş
  • Dünyadaki en büyük shell programları

    • akinomyoga/ble.sh: Toplam 61K LoC (46K SLoC). Bash Line Editor olup tamamen saf bash ile yazılmış, fish benzeri etkileşimli bir satır düzenleyicisidir. Ana dosya out/ble.sh 30K LoC (23K SLoC) içerir ve genel olarak 60K+ LoC vardır. Japonca yazılmış çok sayıda yorum içerir. ble.sh'nin nasıl çalıştığına dair bir genel bakış vardır ve son derece sofistike veri yapılarının kullanımını gösterir.

    • kalua: Yaklaşık 56K SLoC/satırlık POSIX shell'den oluşan bir OpenWRT eklentisi.

    • bashdb: Yaklaşık 14K satır bash'ten oluşan bir bash hata ayıklayıcısı. Hata ayıklayıcı uygulamasının ilginç bir geçmişi vardır.

    • drwetter/testssl.sh: Tek bir dosyada 21K satır bash'ten oluşur. Elle yazılmış gibi görünmektedir.

    • Simplenetes: 17K satır Shell ile yazılmış Kubernetes. Şaşırtıcıdır ama şu anda etkin değildir.

    • rkhunter: Resmî sitede, 2003-2018 arasında yazılmış 21K satırlık bir Bourne shell programı olarak yer alır.

    • romkatv/powerlevel10k: internal/ dizininde 12K satırlık zsh betikleri vardır. Buna ek olarak 8K satırlık yapılandırma ve yardımcı betikler bulunur.

    • dylanaraps/neofetch: 10K satırlık bash 3.2 ile sistem bilgilerini gösterir.

    • xwmx/nb: nb'nin kendisinde 26K LoC (22K SLoC) bash vardır. Ayrıca bats testleri de bash olarak sayılırsa 91K LoC (61K SLoC) vardır.

    • distrobox: 7K'den fazla bash betiğinden oluşur. Terminal içinde herhangi bir Linux dağıtımını kullanmayı sağlar.

    • acme.sh: 7K satırlık bir shell betiğiyle sertifika verir ve yeniler.

    • inxi 2.3.56 [obsolete]: 16K satırlık bash'ten oluşur. 2008'de infobash'in bir fork'u olarak başladı.

    • bashforth: Yaklaşık 3800 satırdan oluşur ama gerçek bir programlama dilini uygular.

    • yoda: bashforth'un yarısı kadar boyuttadır ama tam bir yorumlayıcı ve derleyici uygular.

    • vegardit/bash-funk: Toplam 27K LoC (24K SLoC) büyüklüğünde bir Bash kütüphanesi.

    • Relax-and-Recover: 35K LoC (24K SLoC). Yedekleme ve geri yükleme aracı.

    • abcde / A Better CD Encoder: CD rip işlemleri için kullanılır ve yaklaşık 5.5k LoC'den oluşur.

    • thc-segfault: 3.3K LoC. Ağırlıklı olarak Bash ile kurulmuş bir pubnix sunucusu.

    • ffmpeg/configure: 8.4K LoC. FFmpeg'in yapılandırma betiği olup elle yazılmıştır.

    • ffhevc: 4k LoC. FFmpeg ve libx265 kullanarak HEVC videoya kodlama yapmak için tamamen elle yazılmış bir Bash sarmalayıcı betiği.

    • ffx264: 3.9k LoC. FFmpeg ve libx264 kullanarak H.264/AVC videoya kodlama yapmak için tamamen elle yazılmış bir Bash sarmalayıcı betiği.

    • h264enc: 9.2k LoC. MEncoder kullanarak H.264/AVC videoya kodlama yapmak için tamamen elle yazılmış bir Bash sarmalayıcı betiği.

    • bashtop: 5.3k LoC. Kaynak izleyici.

    • halcyon: 6.6k LoC. Haskell uygulama kurulum sistemi.

    • winetricks: 22K satırlık shell betiği. Wine üzerinde çeşitli Windows programlarını kurar.

    • wordshell: Yaklaşık 7k satır kod. Komut satırından birden fazla WordPress sitesini yönetir.

    • BaCon: Yaklaşık 10k satır kod. BASIC ile yazılmış programları C'ye dönüştürür.

  • Shell benzeri diller / DSL

    • modernish: Shell ile yazılmış taşınabilir bir shell lehçesi.

    • bats: Test yazımı için bir DSL. bash kodu üretir.

    • bashible: bash içinde Ansible benzeri bir DSL.

    • clash: Modern POSIX shell ile uyumlu nesne yönelimli bir framework.

    • bash Infinity: bash için standart kütüphane ve boilerplate framework.

  • Küçük programlar

    • Alpine, Aboriginal, Debian scripts: Blog yazısına bakın.

    • Completion scripts: Büyüktür ama çoğu zaman tekrar içerir.

    • _git Zsh completion: 8.3k satır kod.

    • git-completion.bash: Docker completion.

    • dyne/Tomb: Yaklaşık 3500 satırlık zsh betiği.

    • Basalt: Tamamen saf Bash ile yazılmış tam özellikli bir paket yöneticisi (yaklaşık 2021). Yalnızca birkaç bin satır olsa da şimdiden zengin bir ekosisteme (15'ten fazla uygulama/kütüphane) sahiptir.

1 yorum

 
GN⁺ 2024-12-09
Hacker News görüşleri
  • Sony'de 25 yıl önce, çok yavaş çalışan ve sık sık çöken bir sipariş yönetim sistemini iyileştirme projesine atanmıştı.

    • AIX sunucusunda onlarca yıl boyunca ihmal edilmiş 50.000 satırlık shell scriptlerinden oluşan bir sistemdi.
    • Perl kullanarak sistemi 5.000 satıra indirdi ve performansı 10-100 kat artırdı.
    • Bu proje oldukça tatmin edici bir deneyimdi.
  • Enrust CA ve dizin kurulum programını yazdı; bu program zamanla tüm Unix'lerde çalışacak şekilde gelişti.

    • Kurulum basitti, ancak yükseltme karmaşıktı.
    • Her Unix'in araçları biraz farklıydı ve bunların yönetilmesi gerekiyordu.
    • DEC'in Unix'i, komut satırı araçlarının çıktı genişliğini sınırlaması gibi kafa karıştırıcı davranışlara sahipti.
    • HP-UX'te sürümler arasında değişiklikler vardı.
  • Lil adlı betik dilinin yorumlayıcısını bash ile yazmaya çalıştı, ancak kayan nokta işlemlerinin zorluğu ve sınırlı dizi desteği nedeniyle AWK'yi seçti.

    • AWK, POSIX ortamında kullanılabiliyordu ve genel amaçlı bir dil olarak uygundu.
  • Bash scriptleri karmaşık programlar yazmak için uygun değil.

    • Okunabilirliği düşük, değişken kapsamı kuralları incelikli ve hata işleme ilkeldi.
    • Statik analiz araçları, linter'lar ve debugger'ların eksikliği bakımını zorlaştırıyor.
    • Test etmek zahmetli ve karmaşık mantık ya da veri yapılarını ele almak zor.
    • Bash basit otomasyon için uygun, ancak karmaşık uygulamalar için başka diller daha iyi.
  • rkhunter scripti iyi yazılmış ve bilgi açısından zengin.

    • Çeşitli platformlarda araçların beklendiği gibi çalışmasını garanti etmek için çok sayıda kod kullanılıyor.
    • Daha karmaşık bir programlama dilinde yazılmış olsaydı daha az şeffaf olurdu.
  • Geçmişte kullanılan en büyük shell programı abcde idi; yaklaşık 5500 satır koddan oluşuyordu.

  • FreeBSD Update istemcisi yaklaşık 3600 satır sh kodundan oluşuyor.

    • İşletim sistemini güncelleyen bir araç olarak oldukça fazla işlev sunuyor.
  • Shell, kullanılabilirliği garanti edilen tek araç olabilir; ancak büyük shell uygulamaları yazarken bunu yeniden düşünmek gerekiyor.

  • acme.sh scripti 7.1K satır uzunluğunda ve Lets Encrypt'ten sertifika almak ve yenilemek için kullanılıyor.

  • mod_pagespeed içinde shell scriptleri kullanılarak sistem testleri yapıldı, ancak Python'a geçmek daha iyi olurdu.

    • 10.579 satır bash kodu kullanıldı.
    • Kademeli geçiş yapmak daha verimli olurdu.