Giriş
Bash scriptleri varsayılan olarak hataları görmezden gelme eğilimindedir. Bir komut başarısız olduğunda script çalışmaya devam eder, tanımlanmamış değişkenler boş dizgiler olarak işlenir ve pipeline hataları yutulur. Bu durum, üretim ortamlarında ciddi veri kayıplarına veya hatalı yedekleme işlemlerine yol açabilir. Bash Strict Mode, scriptlerinizi 'gürültülü' bir şekilde başarısız olmaya zorlayarak bu sorunları kökten çözer.
Bash Strict Mode Nedir?
Strict mode, scriptinizin en üstüne ekleyeceğiniz bir dizi flag'den oluşur. Bu yapı, scriptin hata anında hemen durmasını ve belirsiz durumlardan kaçınmasını sağlar.
Temel Bileşenler
set -e: Herhangi bir komut sıfırdan farklı bir durum kodu döndürdüğünde scripti hemen sonlandırır.set -u: Tanımlanmamış değişkenlere erişimi hata olarak kabul eder.set -o pipefail: Pipeline içindeki herhangi bir komut başarısız olursa, tüm pipeline başarısız sayılır.IFS=$'\n\t': Kelime bölmeyi (word splitting) sadece yeni satır ve sekme karakterleriyle sınırlar, boşluklardan kaynaklanan hataları önler.
Uygulama Adımları
- Scriptinizin en üstüne shebang satırından hemen sonra şu satırları ekleyin:
- Beklenen hata durumlarında (örneğin bir dosyanın varlığını kontrol ederken) scriptin durmasını engellemek için
|| trueveyaifbloklarını kullanın.
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'Uyarı:set -ekullanırken, bir komutun başarısızlığını manuel olarak yönetmek istiyorsanızcommand || trueyapısını kullanmayı unutmayın.
Neden Kullanmalısınız?
Üretim ortamında çalışan bir scriptin, bir komut başarısız olduğunda 'başarılı' gibi davranması, sistemde tutarsızlıklara neden olur. Örneğin, rm -rf $VAR/data komutunda $VAR değişkeni boşsa, sistem kök dizininizde ciddi hasar oluşabilir. set -u bu tür hataları daha komut çalışmadan yakalar.
Sık Karşılaşılan Sorunlar ve Çözümleri
Bazı durumlarda strict mode, beklenmedik şekilde scripti durdurabilir. Örneğin, bir döngü içinde sayaç artırırken ((count++)) ifadesi, 0 döndürdüğü için set -e tarafından hata olarak algılanır. Bunun yerine count=$((count + 1)) kullanın.
Eğer bir komutun hata kodunu görmezden gelmek istiyorsanız:
# Hatalı olsa bile script devam eder
ls /dosya/yok || trueÖzetle, Bash Strict Mode, scriptlerinizi daha öngörülebilir ve güvenli hale getirmenin en hızlı yoludur. Modern DevOps süreçlerinde, CI/CD hatlarında ve sistem yönetimi görevlerinde bu standart kullanımı benimsemek, hata ayıklama sürenizi ciddi oranda kısaltacaktır.



