Bash POSIX Kipi
Önceki VI. Oylum - Bash'in Özellikleri Sonraki
Bash POSIX Kipi
Bash'i --posix komut satırı seçeneği ile başlatarak ya da Bash çalışırken set -o posix komutunu çalıştırarak, Bash'in POSIX standardındakinden farklı olan öntanımlı davranışlarını değiştirerek standarda daha yakın davranması sağlanır.
sh olarak çağrıldığında, Bash başlangıç dosyalarını okuduktan sonra POSIX kipine girer
Aşağıdaki liste `POSIX kipi' etkinleştirildiğinde değişenleri gösterir:
  1. Bir komut komut tablosunda artık yoksa, Bash komutun yeni yerini bulmak için $PATH dizinlerini tekrar arar. Bu ayrıca shopt -s checkhash ile etkinleştirilebilir.
  2. Bir iş sıfırdan farklı bir durumla çıktığında iş denetim kodu ve yerleşikleri `Bitti(durum)' benzeri bir ileti basar.
  3. Bir iş durduğunda iş denetim kodu ve yerleşikleri `Durdu(sinyalismi)' benzeri bir ileti basar. Burada geçen sinyalismi örneğin SIGTSTP olabilir.
  4. bg yerleşiği artalana yerleştirilmeyi açıklamayı gerektiren ama işin o anki mi önceki mi olduğunun belirtilmesini içermeyen bir biçim kullanır.
  5. Anahtar sözcüklere takma ad verilemez.
  6. POSIX PS1 ve PS2 geçmiş numarasına ! yorumlaması ve !! için de ! etkinleştirilir ve promptvars kabuk seçeneğinin durumuna aldırmayıp PS1 ve PS2 değişkenlerinin değerlerine parametre yorumlaması uygulanır.
  7. Etkileşimli açıklamalar öntanımlı olarak etkinleştirilir (Bash zaten onları öntanımlı olarak etkin yapar).
  8. Normal Bash dosyaları yerine POSIX başlatma dosyaları çalıştırılır ($ENV).
  9. Yaklaşık yorumlaması satırdaki tüm atama deyimleri yerine bir komut ismini önceleyen atamalar üzerinde uygulanır.
  10. Öntanımlı geçmiş dosyası ~/.sh_history'dir (bu, $HISTFILE değişkeninin öntanımlı değeridir).
  11. kill -l çıktısı tüm sinyal isimlerini boşluklarla ayırarak ve SIG önekini kullanılmaksızın tek satıra basar.
  12. kill yerleşiği SIG önekli sinyal isimlerini kabul etmez.
  13. . dosyaismi komutundaki dosyaismi bulunamazsa, etkileşimsiz kabuklar çıkar.
  14. Bir aritmetik yorumlamasının içindeki bir sözdizimi hatası, bir geçersiz ifadenin içinde sonuçlanıyorsa etkileşimsiz kabuklar çıkar.
  15. Yönlendirme işleçleri, kabuk etkileşimli olmadıkça yönlendirmedeki sözcük üstünde dosyaismi yorumlaması uygulamaz.
  16. Yönlendirme işleçleri, yönlendirmedeki sözcük üstünde sözcük ayrımlaması uygulamaz.
  17. İşlev isimleri geçerli kabuk isimleri olmalıdır. Böylece bu isimler, bir rakam ile başlayamaz ve harfler, rakamlar ile altçizgi karakteri dışında karakterleri içeremez. Bir işlev isminin bir geçersiz isimle bildirilmesi etkileşimsiz kabuklarda bir ölümcül sözdizimi hatası oluşturur.
  18. POSIX'e özel yerleşiklere komut araması sırasında kabuk işlevlerinden önce bakılır.
  19. Bir POSIX özel yerleşiği bir hata durumu ile dönerse bir etkileşimsiz kabuk çıkar. Ölümcül hataların da listelendiği POSIX standardı yanlış seçeneklerin aktarılması gibi şeyler, yönlendirme hataları, komut ismini önceleyen atamalar için değişken atama hataları ve benzerlerini içerir.
  20. CDPATH atanmışsa, cd yerleşiği bulunulan dizini ona doğrudan eklemeyecektir. Bunun anlamı: cd yerleşiğine bir argüman olarak verilen isimle aynı isimdeki bir dizin bulunulan dizinde mevcut olsa bile, $CDPATH içindeki girdilerden birinden oluşturulabilen geçerli dizin ismi yoksa cd yerleşiği başarısız olacaktır.
  21. Atama deyimlerinden sonra gelen komut ismi olmadığında, bir değişken atama hatası oluşursa, bir etkileşimsiz kabuk bir hata durumu ile çıkar. Örneğin, bir salt-okunur değişkene bir değer atanmaya çalışılırsa, bir değişken atama hatası oluşur.
  22. Bir for deyiminin yineleme değişkeni veya bir select deyiminin seçim değişkeni bir salt-okunur değişkense bir etkileşimsiz kabuk bir hata durumu ile çıkar.
  23. Süreç ikamesi yoktur.
  24. POSIX özel yerleşiklerinden önce verilen atama deyimleri komut işini tamamladıktan sonra da kabukta etkin olarak kalır.
  25. Kabuk işlevi çağrılarından önce verilen atama deyimleri işlev döndükten sonra da bir önceki maddede olduğu gibi kabukta etkin olarak kalır.
  26. export ve readonly yerleşik komutları çıktılarını POSIX'in gerektirdiği biçemde gösterir.
  27. trap yerleşiği sinyal isimlerini SIG ile öncelemeden gösterir.
  28. trap yerleşiği ilk argümanına olası bir sinyal belirtimi var mı acaba diye bakmaz ve eğer varsa argüman yalnızca rakamlardan oluşmadıkça ve geçerli bir sinyal numarası olmadıkça sinyal işlemeyi özgün mecrasına geri döndürür. Eğer kullanıcı sinyal işlemeyi özgün mecrasına geri döndürmek isterse ilk argüman olarak - kullanmalıdır.
  29. . ve source yerleşikleri bir dosyaismi argümanınını, PATH aramasında bulamazlarsa, bulunulan dizinde aramazlar.
  30. Komut ikamelerini çalıştırmak için çatallanan altkabuklar -e seçeneğinin değerini kendilerini çalıştıran kabuktan miras alırlar. POSIX kipinde değilken, Bash -e seçeneğinin değerini bu altkabuklarda temizler.
  31. Etkileşimsiz kabuklarda bile takma ad yorumlaması daima etkindir.
  32. alias yerleşiği takma ad tanımlarını listelemek amacıyla kullanıldığında -p seçeneği belirtilmedikçe tanımların başlarında 'alias gösterilmez.
  33. set yerleşiği seçeneksiz olarak çağrıldığında, kabuk işlevlerinin isimlerini ve tanımlarını göstermez.
  34. set yerleşiği seçeneksiz olarak çağrıldığında, sonuçlar basılamayan karakterleri içerse bile, kabuk metakarakterlerini içermedikçe, değişken değerlerini tırnaksız olarak gösterir.
  35. cd yerleşiği mantıksal kipte çağrıldığında ve dosya yolu $PWD'den oluştuğunda ve de bir argüman olarak verilen dizin ismi içinde bulununlan dizini göstermediğinde cd fiziksel kipe dönmek yerine başarısız olacaktır.
  36. pwd yerleşiği -P seçeneği ile çağrıldığında $PWD'nin içeriğini sembolik bağ içermeyen dizinlerle yazar.
  37. pwd yerleşiği -P seçeneği belirtmek suretiyle dosya sistemini sınaması istenmese bile bastığı değerin, içinde bulunulan dizin ile aynı olup olmadığına bakacaktır.
  38. Geçmiş listelenirken fc yerleşiği geçmiş girdisinin değiştirilmiş olup olmadığına dair bir belirti içermez.
  39. fc tarafından öntanımlı metin düzenleyici olarak ed kullanılır.
  40. type ve command yerleşikleri çalıştırılabilir olmayan bir dosyayı kabuk çalıştırmaya çalışacak olsa hatta $PATH içinde bu isimde sadece bu dosya varsa bile böyle birşey bulduk diye raporlamazlar.
  41. v komutu (Ç.N.:v değil vi olacaktı sanırım) çalıştırılmak istendiğinde vi kipindeyken $FCEDIT ve $EDITOR değişkenlerinin içeriklerine bakılmaksızın doğrudan vi metin düzenleyici çalıştırılır.
  42. xpg_echo seçeneği etkinken Bash argümanları echo seçenekeri olarak yorumlamaya çalışmaz. Her argüman gösterildikten sonra öncelenmiş karakterler dönüştürülür.
POSIX kipindeyken öntanımlı olan ancak Bash'in gerçeklemediği bazı POSIX davranışları vardır. Özellikle:
  1. fc yerleşiği, geçmiş girdileri düzenleneceği zaman FCEDIT ortamda tanımlı değilken öntanımlı metin düzenleyici olarak ed'i kullanacağına gidip $EDITOR değişkeninin içeriğine bakar; $EDITOR tanımlı değilse ed'i kullanır.
  2. Yukarıda dikkat çekildiği gibi, Bash, echo yerleşiğinin tam uyumlu olabilmesi için xpg_echo seçeneğinin etkin olmasını gerektirir.
  3. Bash kurulum sırasında configure betiğine --enable-strict-posix-default seçeneği verilmek suretiyle öntanımlı olarak POSIX uyumlu olmak üzere yapılandırılabilir (bkz, İsteğe Bağlı Özellikler).
Önceki Üst Ana Başlık Sonraki
Sınırlı Kabuk Başlangıç VII. Oylum - İş Denetimi
Bir Linux Kitaplığı Sayfası