Unix benzeri bir sistemde neden birden fazla mermi var?


16

Unix'in temellerini öğrenmeye ve unix benzeri bir sistemde neden bu kadar çok kabuk olduğunu merak etmeye başladım. Unix Ortamında İleri programlama kitabından :

Kabuk, kullanıcı girişini okuyan ve komutları yürüten bir komut satırı yorumlayıcısıdır. Kabuğa kullanıcı girişi normalde terminalden (etkileşimli kabuk) veya bazen bir dosyadan (kabuk komut dosyası olarak adlandırılır) gelir.

Ve sonra kitap, Bourne kabuğu, Bourne-tekrar kabuğu, Cshell, vb. Sorum şu: Neden birden fazla mermiye ihtiyacımız var?


4
Diğer çeşitli teknolojiler için bu kadar çok standart olduğu için aynı sebep geçerlidir. xkcd.com/927
Dan Firelight tarafından Fiddling

1
Aynı sebepten dolayı, birden fazla programlama dili için derleyiciler / tercümanlar (ayrıca bir dil için birden çok derleyici) veya birden çok internet tarayıcısı da olabilir.
Mischa Arefiev

6
Sorunuz büyük olasılıkla. " Neden birden fazla mermiye ihtiyacımız var? " Kim birden fazla mermiye ihtiyacımız olduğunu söyledi ? Kitabınız dedik var birden kabukları. Bu aynı şey değil.
Rob

Yanıtlar:


15

Modern UNIX ortamlarında kullanılan çoğu merminin POSIX sh özelliklerine uyması amaçlanmıştır. POSIX sh, daha önceki Bourne kabuğundan türetilen orijinal Korn kabuğundan (ksh88) türetilir, ancak POSIX sh, ksh88 işlevselliğinin yalnızca küçük bir alt kümesini belirtir. Yalnızca asgari gereksinimi uygulayan bir kabukta, en önemsiz senaryolar dışında tümünü güvenli ve makul bir şekilde yazmak için gereken birçok özellik eksik. Örneğin, yerel değişkenler ve diziler standart olmayan ekstralardır.

Bu nedenle, ilk neden mermiyi ekstra özelliklerle genişletmektir. Farklı mermiler farklı şeylere odaklanmayı seçer. Örneğin, Zsh gelişmiş etkileşimli özelliklere odaklanırken, ksh93 (mevcut "orijinal" korn kabuğu) güçlü programlama özelliklerine ve performansına odaklanır. Dash gibi çok küçük mermiler bile yerel değişkenler gibi en az birkaç standart dışı ekstra ekler.

Ekstra özellikler nadiren geniş çapta birlikte çalışabilir. Ksh88 özellik kümesinin çoğu, genişletilmiş globbing sözdizimi gibi oldukça iyi bir şekilde birlikte çalışabilir, ancak standart dışı özelliklerle, hiçbir garanti yoktur ve bunları taşınabilir bir şekilde kullanmak için ne yaptığınızı gerçekten bilmelisiniz.

İkinci neden miras. Hala / bin / sh için eski standart dışı uygulamaları kullanan çok sayıda tescilli Unix var. Yakın zamana kadar Solaris hala Bourne'yi kusurları olarak kullandı ve modern bir şeye yükseltmek yerine Heirloom kabuğunu korumayı seçti. Bu sistemler genellikle, örneğin PATH değişkeninizi değiştirerek veya münferit komut dosyalarındaki shebang'ları değiştirerek değiştirebileceğiniz farklı kabuklarla birlikte gelir.

Özetlemek gerekirse. Çoğunlukla varsayılan olarak birden çok kabuk vardır:

  • Ekstra özellikler için, özellikle taşınabilir olmayan ekstralarla uğraşmak için.
  • Genellikle korunmayan eski komut dosyalarını işlemek için.
  • boyut / performans. Gömülü sistemler genellikle mksh veya busybox sh gibi küçük kabuklar gerektirir.
  • Lisanslama nedenleri. AT&T ksh 2000 yılına kadar tescilli bir yazılımdı. Bu büyük ölçüde Zsh ve Bash gibi tüm ksh benzeri klonlara neden oldu.
  • Diğer tarihsel nedenler. Bugün çok popüler olmasa da, scsh ve es gibi dili yeniden tasarlama konusunda köklü girişimler oldu. Birçok merminin işlem ikame özelliği başlangıçta rc'den (biraz farklı sözdizimi ile) ve csh'tan brace genişlemesinden gelir. Farklı mermilerin, bu tür özelliklerin farklı kombinasyonları vardır, genellikle bazı ince veya çok ince farklarla.

2
localPOSIX veya Unix olmamasına rağmen , Linux standardında (LSB) ve debian ilke standardında belirtildiğini ve gerekli olduğunu unutmayın . Bunun esbir takip olduğunu unutmayın rc.
Stéphane Chazelas

1
Şu anda mksh, Publicing Bourne Shell olarak adlandırılan şey, lisanslama nedenleriyle de yazılmıştır. (Bu sorunlar hala devam ediyor - lisanslama ve taşınabilirlik ve boyut, Google'ı Android'i mksh'yi dahil etmeye ikna etmeme yardımcı olan üç faktördü.)
mirabilos

19

Çünkü insanların farklı ihtiyaçları vardır ve bu durumda ihtiyaçlarınıza uygun alternatiflere sahip olmak iyidir. Bir kabuk sadece kendi başına bir araçtır ve bence başka biri tarafından değiştirilmelidir. Bu, Microsoft Windows'un seçtiklerinin aksine Unix / Linux'un gücüdür.

Benzer şekilde ... Neden bu kadar çok metin editörü var? İnsanlar zaten varsa yeni bir tarayıcı geliştiriyorlar mı? Neden GNOME, KDE, Xfce, LXDE, E17 vb. Var?


12
Tam. "Neden bu kadar çok pencere yöneticisi?" de. Bir unix yerli ters soru sorabilir: neden sadece bir CMD.EXE? Windows neden bu kadar katı ve özelleştirilemiyor?
Bruce Ediger

1
@BruceEdiger Ne demek istiyorsun, sadece bir cmd.exe? Bunları kullanmak istiyorsanız, alternatifleri var. Microsoft'un bile alternatif olarak PowerShell var.
Malcolm

3
COMMAND.COMDOS'ta bile değiştirilebilir. Ancak, diğer uygulamaların (ve diğer kullanıcıların) varsayımları nedeniyle genellikle çok kırılgan bir sisteminiz olur. Sonuç olarak, birkaç başarılı alternatif var CMD.EXE. Birincisi, Microsoft'u destekleyen eylemsizliğe sahip PowerShell. Başka bir örnek, bashMingW halkından bahsetmemek için, Cygwin topluluğundan gelen iyi destek nedeniyle garip bir şekilde yeterli . Pencere Yöneticilerine gelince, Windows'un her seferinde yalnızca bir tane vardı, ancak Windows ortamının kendisi geliştikçe zamanla birkaç kez oldu.
RBerteig

Bu cevap için +1. Bu yüzden çok farklı çeşitlendirilmiş UNIX lezzetlerine sahibiz: AIX, HP-UX, Solaris, Tru64, IRIX, UnixWare, OS X, Linux, FreeBSD, NetBSD, OpenBSD, ..., adını siz verin!
tonga

4

Kısa cevap

Tuhaf bir lisans geçmişi nedeniyle, tek bir kuruluş Unix geliştirmedi. Hem gönüllülerin hem de şirketlerin katıldığı bir topluluk süreciydi. Bu varlıklar her zaman tüm araçlarını paylaşmadı, bu yüzden ayrı mermiler oldu. Bunun ne kadar üretken olduğunu anladığımız zaman, kullanılan tüm mermileri birleştirmek için çok geçti. Bunun yerine, tüm bu mermilerin (teorik olarak) birbirleriyle uyumlu olmasını sağlamak için çalışmalar yapılmıştır .

Uzun cevap karmaşıktır ve Unix'in tarihiyle sıkı bir şekilde bağlantılıdır. Bu sayfada tek bir cevapta bulunmasının bir yolu yoktur, ancak yaygın olarak (yanlış) belgelenmiştir. Unix geçmişi ile ilgili web ve kitaplara bakarak daha ayrıntılı ve kesin cevaplar bulacaksınız.


2

Farklı web tarayıcıları ile aynı nedenlerle farklı kabuklar vardır: herkesin tercihi vardır ve bazı kabukların tarihi bagajı veya momentumu vardır. Her birinin farklı özellikleri ve özellikleri vardır.


1

Çoğunlukla tarih ...

Bourne (uygunluk) SysV Unix'in bir parçası olarak geliştirilirken, BSD kullanılır csh ... Daha sonra bash, Bourne kabuğuna (ve ksh gibi geliştirilmiş sürümlerine) açık kaynaklı bir alternatif olarak geliştirildi. Bourne benzeri bir kabuk POSIX standardında benimsenmiştir. ksh uyumludur ve bash uyumlu olabilir.

Gibi kabuklar cshve tcsh(komut tamamlama vb yoktur) ancak orijinal Bourne kabuğu daha etkileşimli kullanımı çok daha kolaydır kodlama için korkunç ...

Unix tabanlı gömülü sistemler gibi bazı ortamlarda, komut dosyası özellikleri, boyut ve hız komut tamamlama gibi etkileşimli özelliklerden daha önemlidir ve kabukların farklı bir çeşidi kullanılma eğilimindedir.

Taşınabilir komut dosyaları için POSIX uyumlu Bourne varyantı kullanmalı ve uzantılardan kaçınmalısınız.


3
-1 dünyanın SysV'de başladığını düşündüğü için. Bourne kabuğu SysV serbest bırakıldı altı yıl önce, 1977 yılında UNIX v7 içinde serbest bırakıldı.
Rob

@Rob, s / / 1977 tarihli 1979 /
Stéphane Chazelas

Yeterince adil ... * nix geçmişi oldukça karmaşık ... Bkz. En.wikipedia.org/wiki/File:Unix_history-simple.svg
Gert van den Berg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.