5 puan yazan GN⁺ 2023-11-25 | 1 yorum | WhatsApp'ta paylaş

ShellCheck'e Giriş

  • ShellCheck, kabuk betiklerindeki hataları bulan bir araçtır.
  • Yerel ortamda cabal, apt, dnf, pkg, brew üzerinden kurulabilir.
  • Betiği yapıştırdığınızda ShellCheck analiz sonuçlarını gösterir.

ShellCheck'in Özellikleri

  • ShellCheck, GPLv3 lisansı ile özgürce kullanılabilir.
  • Belgeleri ShellCheck Wiki'de yer alır ve kaynak kodu GitHub'da incelenebilir.
  • Çoğu dağıtımda veya paket yöneticisinde zaten paketlenmiş durumdadır.
  • Başlıca editörlerde entegre linter olarak desteklenir; ayrıca CodeClimate, Codacy ve CodeFactor üzerinden GitHub depolarındaki kodu otomatik olarak denetleyebilir.
  • Haskell diliyle yazılmıştır ve bu alana ilgi duyan kullanıcılar için uygundur.

Teşekkür

  • GitHub Sponsors'a özel teşekkürler: Gitpod, Mercedes-Benz, BashSupport Pro, per1234, WhitewaterFoundry, cavcrosby, dcminter, photostructure, Cronitor, djdefi, steve-chavez ve diğerleri.

GN⁺'un Görüşü

  • Bu yazıdaki en önemli nokta, ShellCheck'in kabuk betiklerindeki hataları bulmak için faydalı bir araç olmasıdır.
  • ShellCheck'in ücretsiz olması, farklı platformlar ve editörlerde desteklenmesi ve kullanımının kolay olması okuyucuların ilgisini çekebilir.
  • Özellikle açık kaynak topluluğunun desteği ve Haskell diliyle geliştirilmiş olması, yazılım geliştiricilere çekici gelebilir.

1 yorum

 
GN⁺ 2023-11-25
Hacker News görüşleri
  • Betik yazarken dikkat edilmesi gerekenler

    • Bildirilmemiş değişken kullanıldığında hata üretmesi için -u (nounset) seçeneğinin kullanılması öneriliyor. Dizi genişletmesinde boş dizinin unbound sayıldığı durum bunun istisnasıdır.
    • Komutların çalıştırılmasını önleyen sahte bir çalıştırma (dry-run) denemek için -n (noexec) seçeneği kullanılabilir.
    • -e (errexit) seçeneği de yararlıdır, ancak yalnızca başarısız olan "çıplak" komutların çıkışa neden olduğuna dikkat edilmelidir. Bunu önlemek için komutlara || fail "..." eklemek tercih ediliyor.
  • Kabuk betiklerinde zafiyet keşfi

    • Aritmetik genişletme yoluyla bir yetki yükseltme zafiyeti bulundu. Örneğin, $((1 + ENV_VAR)) üzerinden $ENV_VAR kontrol edilebiliyorsa kod enjekte edilebilir.
    • Shellcheck bunu varsayılan ayarlarla yakalayamaz. Güvenlik açısından kritik işlevler uygulanırken kabuk kullanmamak daha iyidir.
  • Shellcheck ve strictbash

    • Shellcheck çok kullanışlıdır.
    • strictbash, betiği çalıştırmadan önce Shellcheck çalıştıran bir wrapper'dır; hata varsa betiğin çalıştırılmasına izin vermez. Ayrıca tüm Bash "strict mode" bayraklarını ayarlar.
  • Shellcheck'ten bahsedilmesi

    • Shellcheck hakkında çok sayıda yorum var ve son büyük tartışma 2021'de yapılmıştı.
  • Haskell ve Turtle kullanımı

    • Haskell kullanıp Turtle kütüphanesiyle dağıtım betiklerini dönüştürerek tekrar büyük ölçüde azaltıldı.
    • Sonuç olarak kod çok daha kısa hale geldi.
  • Shellcheck ve linter kullanımı

    • "Tüm uyarıları düzelttikten sonra commit et" ilkesine uyuluyor ve Shellcheck ile diğer linter'lar pre-commit yapılandırmasına ekleniyor.
    • Çoğu kabuk betiği .gitlab-ci.yml dosyalarında yer aldığı için denetlenmesi zor. Bunu otomatik denetleyen bir wrapper yapıldı.
  • Bash dil sunucusu

    • Bir Bash dil sunucusu da mevcut.
  • Shellcheck'in öğretici etkisi

    • Shellcheck ile ilk production /bin/sh betiği denetlendiğinde, 80'lerden beri betik yazıyor olunmasına rağmen yeni şeyler öğrenildi.
  • Bach kullanım önerisi

    • Bash kullanmak gerektiğinde Bach kullanılması öneriliyor. Yeterince uzun işler için Bash kullanmak uygun olmayabilir.
  • Shellcheck ve source/import işleme

    • Shellcheck harika, ancak source ya da import işlemlerini ele almak çok zahmetli. Bunun nedeni sh'nin bir kâbus gibi olması.