6 puan yazan GN⁺ 2025-03-23 | 1 yorum | WhatsApp'ta paylaş
  • Birçok komut satırı yardımcı programı kısa biçimli seçenekleri (-f) ve uzun biçimli seçenekleri (--force) destekler
  • Kısa biçim etkileşimli kullanım içindir; scriptlerde uzun biçimin kullanılması tavsiye edilir
  • Örneğin terminalde $ git switch -c my-new-branch yazarsınız.
  • Sürüm scriptinde ise şöyle yazılır:
    • try shell.exec("git fetch origin --quiet", .{});
    • try shell.exec("git switch --create release-{today} origin/main", .{ .today = stdx.DateUTC.now() }, );
  • Uzun biçimli seçenekler okuyucu için çok daha açıklayıcıdır

1 yorum

 
GN⁺ 2025-03-23
Hacker News yorumu
  • Uzun seçenekleri tercih ederim, ancak POSIX komutlarını taşınabilir biçimde çağırmanız gerektiğinde tek seçenek kısa seçeneklerdir. POSIX uzun seçenekleri tanımlamaz

    • Örneğin, diff belirtimine bakabilirsiniz
    • Çoğu durumda, POSIX yardımcı araçlarına dayanmak yerine kütüphane bağlarını kullanmak daha iyi bir alternatiftir
    • grep çağırmak yerine libpcre gibi bir şey kullanmak daha verimli olabilir
    • git, hg, rg, ag gibi POSIX dışı araçlarda uzun seçenekler kullanmak mantıklıdır
  • Dize enterpolasyonu ile komut çalıştırmayı birbirine karıştırmamalısınız

    • Özellikle komut kabuk üzerinden işleniyorsa dikkatli olunmalıdır
    • Hangi dil olursa olsun, argümanları doğrudan execv(2), execvp(2) vb. çağrılara iletmek için liste tabanlı veya dizi tabanlı çalıştırma API'leri kullanılmalıdır
  • Uzun seçeneklerin kullanılması gerektiğine katılıyorum, ancak taşınabilirlik hesaba katılmalıdır

    • Tüm BSD dağıtımları GNU tarzı uzun seçenekleri desteklemez
    • Taşınabilirlik istiyorsanız kısa seçenekler kullanmalısınız
  • Tüm seçeneklerden sonra, dinamik argümanlardan önce -- kullanmayı unutmayın

  • Komutu çağırmadan önce komut uzunluğunun ARG_MAX değerinden büyük olup olmadığını kontrol etmelisiniz

    • Örneğin, aşağıdaki gibi bir komut olduğunda:
      • grep --ignore-case --files-with-matches -- "hello" *.c
    • Şöyle çağırmalısınız:
      • CMD="grep --ignore-case --files-with-matches -- \"hello\" *.c"
      • ARG_MAX=$(getconf ARG_MAX)
      • CMD_LEN=${#CMD}
      • if (( CMD_LEN > ARG_MAX )); then
      • echo "Error: Command length ($CMD_LEN) exceeds ARG_MAX ($ARG_MAX)." >&2
      • exit 1
      • fi
      • eval "$CMD" # uyarı, dosya adlarını değerlendirir
  • Bu yaklaşıma katılıyorum. Bir başka avantajı da seçeneğin ne yaptığını man sayfasında grep ile aramanın daha kolay olmasıdır

  • Betiğinizi başka POSIX sistemlerine taşınabilir yapmak istiyorsanız kısa seçenekler kullanmanız gerekebilir

    • Uzun seçenekler standartlaştırılmamıştır
    • Tavizleri kendiniz değerlendirmelisiniz
  • Takip etmeyi ve git blame kullanmayı kolaylaştırmak için seçenekler ayrı satırlarda tutulmalıdır

  • Bu, betik yazarken temel kurallardan biridir. Uzun seçenek mümkünse kullanılmalıdır

    • Bunu yapmak fazlasıyla mantıklıdır
  • Uzun biçimli seçenekler okuyucu için çok daha açıklayıcıdır

    • Daha az yazım hatası olur