Aldığım cevaplara dayanarak (diğerlerinden birini seçmek zor oldu), Bash'in de kullandığı bir çıkış kodunu kullanarak belirli hata türlerini belirtmek zararlı değildir . Bir kullanıcı komut dosyası bu hata kodlarından biriyle çıkarsa Bash (veya başka bir Unix kabuğu) özel bir şey yapmaz (istisna işleyicileri çalıştırmak gibi).
Gelişmiş Bash-Scripting Guide'ın yazarının BSD çıkış kodlarını standartlaştırmaya çalıştığını ( sysexits.h
) kabul ettiği ve basitçe kullanıcılar kabuk komut dosyaları yazdıklarında, önceden tanımlanmış çıkış kodlarıyla çakışan çıkış kodlarını belirtmemelerini önerir . kullanımda, yani özel çıkış kodlarını 64-113 aralığındaki 50 durum koduyla sınırlarlar.
Fikri (ve mantığı) takdir ediyorum, ancak yazarın tavsiyeyi görmezden gelmenin zararlı olmadığı daha açık olsaydı, bir komut dosyası tüketicisinin belirtilen örnek gibi hataları kontrol ettiği durumlar dışında tercih ederdim. ( command not found
).
İlgili POSIX spesifikasyonları
POSIX'in çıkış kodları hakkında söylediklerini araştırdım ve POSIX spesifikasyonu Gelişmiş Bash-Scripting Guide'ın yazarıyla aynı fikirde görünüyor. İlgili POSIX spesifikasyonlarından alıntı yaptım (benimkini vurgulayın):
Komutlar için Çıkış Durumu
Her komutun diğer kabuk komutlarının davranışını etkileyebilecek bir çıkış durumu vardır. Yardımcı olmayan komutların çıkış durumu bu bölümde belgelenmiştir. Standart yardımcı programların çıkış durumu ilgili bölümlerinde belgelenmiştir.
Bir komut bulunamazsa, çıkış durumu 127 olur. Komut adı bulunur ancak yürütülebilir bir yardımcı program değilse, çıkış durumu 126 olur. Kabuğu kullanmadan yardımcı programları çağıran uygulamalar bu çıkış durumu değerlerini kullanmalıdır benzer hataları bildirmek için.
Sözcük genişletme veya yönlendirme sırasında bir komut başarısız olursa, çıkış durumu sıfırdan büyük olacaktır.
Dahili olarak, bir komutun sıfırdan farklı olmayan çıkış durumuyla çıkıp çıkmadığına karar vermek amacıyla, kabuk komut için alınan tüm durum değerini WEXITSTATUS makrosunun (Sistem Arabirimleri biriminde tanımlandığı gibi) eşdeğeriyle tanıyacaktır. POSIX.1-2008). Çıkış durumu '?' Özel parametresi ile raporlanırken, kabuk mevcut sekiz çıkış durumunun tamamını bit olarak bildirecektir. Bir sinyal aldığı için sonlandırılan bir komutun çıkış durumu 128'den büyük olarak rapor edilecektir.
Yardımcı exit
program
Diğer bölümlerde açıklandığı gibi, belli çıkış durumu değerleri olan saklıdır özel kullanımlar için ve gerektiği yalnızca bu amaçlar için uygulamalar tarafından kullanılacak:
126
- Yürütülecek bir dosya bulundu, ancak yürütülebilir bir yardımcı program değildi.
127
- Yürütülecek bir yardımcı program bulunamadı.
>128
- Bir komut bir sinyal tarafından kesildi.
Daha fazla bilgi
Değer için, Özel Anlamlarla Çıkış Kodları listesinden biri hariç hepsini doğrulayabildim . Bu çıkış kodları tablosu, Bash referansında belgelenen hata kodlarının nasıl oluşturulacağına ilişkin daha fazla ayrıntı ve örnekler sağladığından faydalıdır .
128 çıkış durumu oluşturulmaya çalışıldı
Bash 3.2.25 ve 4.2.46 sürümlerini kullanarak, bir 128 Invalid argument to exit
hata atmaya çalıştım, ancak her 255 aldığımda (Çıkış durumu aralık dışında). Örneğin, exit 3.14159
bir kabuk betiğinin parçası olarak veya etkileşimli bir alt kabukta yürütülürse, kabuk şu kodla çıkar 255
:
$ exit 3.14159
exit
bash: exit: 3.14159: numeric argument required
Daha da eğlenmek için, basit bir C programı çalıştırmayı denedim, ancak bu durumda, exit(3)
fonksiyon çıkmadan önce şamandırayı bir int'e (bu durumda 3) dönüştürdüğü görülüyor :
#include <stdlib.h>
main()
{
exit(3.14159);
}