Bash neden her yerde (çoğu Linux dağıtımında değilse)?


50

Bash, denediğim her Linux dağıtımında varsayılan olarak, Z shell (zsh) gibi alternatifler üzerinden kullanılır . Bunun teknik veya tarihi bir nedeni var mı?


1
Değil. FreeBSD sistemimde tcsh varsayılan kabuktur!

54
FreeBSD sisteminiz bir Linux dağıtımı değildir.

8
Tanrı, dağıtımlar arasında bir miktar tutarlılık olduğunu yasaklıyor ...
OMG Ponies

4
Hayır, ama "her yere" ait :) :)

Yanıtlar:


106

Tarih (araştırma yoluyla değil, Bell Labs insanlarıyla takılmak için çok fazla zaman harcayarak elde edilmiştir):

  1. Başlangıçta (başlangıcın Unix Sürüm 7 olduğunu düşünüyorsanız) Bourne kabuğuydu. Steve Bourne, kullanıcının etkileşimini kontrol eden kabuğun işletim sisteminin özel bir parçası değil, bir kullanıcı programı olabileceğini gösteren ilk kişiydi. Tarihi bir buluş. Kabuğun kendisi komut dosyası için nispeten temizdi, ancak komut satırı düzenlemesi veya iş denetimi yoktu. Bourne Unix Kabuğuna Giriş, bugün yeni başlayan kullanıcılar için hala yararlıdır.

    Düzenleme : Ken Thompson ve John Mashey'den Multics'ten bazı "tarih öncesi" ler görmezden geldim. Bourne'un tüm bu çalışmaların farkındaydı (aynı laboratuarda, 1127, Bell Laboratuarlarındaydı), ama Bourne'un kabukları kesindi ve önceki eserin Steve Bourne tarafından yorumlanması dışında çok az etkisi vardı. Örneğin, Ken daha sonra Plan 9 C derleyicisini yazmış ve Plan 9 üzerinde çok etkili olmasına rağmen, Tom Duff'un Plan 9 mermisi (rc) ile ilgili makalesinde sadece Bourne mermisi sayılmıyor, Thompson'ın değil.

  2. Kabuk sadece bir kullanıcı programıdır, yani herkes yazabilir. Sürüm 7 Unix New Jersey'de oluşturulurken, Berkeley Unix Kaliforniya'da kuruldu. Berkeley'deki Bill Joy csh, C kabuğunu yazdı . Joy, iş kontrolünü ve tarihini ve daha sonra komut satırı düzenlemesini ekledi, ancak Bourne'nin çalışmasının farkında değildi ve bu nedenle dilini (önceki merminin içindeki "tarih öncesi" olarak kabul ettiğim) Thompson kabuğuna dayandırdı. Unix topluluğu iş kontrolünü severdi, ancak Bourne dilini de seviyorlardı. Csh dile karşı değil-özellikle-iyi polemikte için bkz Zararlı kabul CSH Programlama . Bir süredir, birçok kişi cshiş kontrolü ve tarih özellikleri için etkileşimli olarak kullandı, ancak Bourne'yi shsenaryo yazmak için kullandı . Bu durum idealden daha azdı.

    Düzenleme : Beni kronolojisine göre düzelttiği için DigitalRoss'a teşekkürler csh. Eğitimimi BSD’yi “Berkeley sapkınlığı” olarak nitelendiren insanlardan aldığım için, orada gerçeklerden oldukça kısaydım.

  3. Bell Labs'ta çalışan Dave Korn, Korn kabuğunu (ksh) üretmek için Bourne kabuğunun yeniden yapılanmasını mükemmel bir şekilde yaptı. Bourne kabuğuyla tamamen geriye dönük olarak uyumluydu shancak kayda değer bir gelişme gösterdi. kshPOSIX standardının temeli oldu ve Sun yazılımı ile birlikte standart olarak gönderildi. (Bu, Bill Joy'un Berkeley'i Sun'ı bulmasına yardım etmek için terk etmesine ve lider yazılımcılarından biri olmasına rağmen)

  4. Bell Labs ve AT&T aptalca kshaçık kaynak gösterememektedir . ksh88yaygın olarak kullanılır, ancak kaynaklara sahip olmak yasal değildir. Bazı insanlar o kadar bağımlı hale gelir ki dijital suçlu olurlar.

    Düzenleme : Bu gerçekten bu kadar aptal mıydı? Bilmek zor. Berkeley zaten Unix'i veriyordu ve diğer şirketler yakında takip etmek üzereydiler, ancak bu, Kurumsal Üstatlar'ın Unix'in ücretlendirilmesine inandığı zamanlardı. Ancak sonuçlar: AT&T Unix, çeşitli partilere birçok defa satıldıktan sonra öldü. BSD ve türevleri canlı ve iyidir, ancak bu başlangıçlar "Linux" ve "GNU" denilen şeylerin, bir zamanlar Bell Laboratuarlarına ait büyük bir zihniyet payına sahiptir.

  5. Özgür Yazılım Vakfı, bir POSIX kabuğunun sıfırdan uygulanmasından "temiz oda" yapar ve Dave Korn'un fikirlerini o zamanki gibi alır, ayrıca her zamanki FSF tarzında, programlanabilir tamamlama gibi yeni özellikler ekler. Buna "Bourne tekrar" kabuğu diyorlar ya da bash.

  6. 1990'ların ortasında AT&T açık kaynaklar ksh93, ancak o zamana kadar yaygın kabul için çok geç oldu. Lisans anlaşması standart dışıdır. bashve kshayrışır ve kshasla tarihteki yeri ile orantılı olarak pazar payını elde edemez.

Dersler:

  • Piyasaya sunulan ilk yeterli ürün (sh) kazanır.

  • İnsanlar yeni özellikleri (iş kontrolü, komut tamamlama) severler, ancak eski senaryoları çalışmaya devam ettiklerinde onları daha da çok severler.

  • Düzenleme : Mühendislik profesörleri, tarihin bilim tarihçilerine bırakmalı :-)


Bence bash'ın diğer her şeydeki popülaritesi hakkında en eksiksiz ve doğru açıklamaya sahipsin. Varsayılan zsh olan ortamlar gördüm ve onlardan nefret ediyorum çünkü tüm sözdizimi biraz kapalı ve çözemiyorum ya da hata yapıyorum.

Madde işareti (1) düzeltilmelidir: Bourne kabuğu Mashey kabuğu olmadan önce ve Mashey kabuğu Ur-Shell'den önce Ken Thompson kabuğu. Bkz en.wikipedia.org/wiki/Unix_shell
Jim Ferrans

2
Özellikle Norman'ı suçlamadan, burada birçok yanlışlıklar var. Ken Thompson, V6'dan tek kabuk olan ve V7 ve 32V'de paralel olarak kullanılan ilk kabuğu yazdı. Stephen Bourne "ilk" kabuk yazarı değildi, KT kabuğunu yeniden yazdı. Csh, 4.1BSD'ye kadar iş kontrolüne sahip değildi, ancak onu alan ilk kabuk oldu. Csh, herhangi bir kabuk sözdizimini değiştirmedi, Bourne kabuğu gibi, V6 kabuğu ile geriye dönük olarak uyumluydu. Hemen hemen tüm kodlar o günlerde lisanslandı. Unix için lisans ücretini ödemede tam olarak ne aptaldı?
DigitalRoss

2
Muhtemelen bunu çok iyi açıklamıyorum, bir daha deneyeyim. Csh , Bourne'dan önce ya da en geç bir kıta uzakta paralel bir uygulama oldu. (İnternetten önce, önemliydi.) Cory Hall'da Bill Joy'un yanında oturuyordum, bazen yazarken; Sizi kesinlikle V6'da yazdığı konusunda temin ederim. Dediğim gibi, csh (ve Bourne), V6-Thompson-geriye dönük uyumludur, zira bunları yazdıklarında var olan tek şey bu. Tabii Bourne uyumlu değil, AFAIK Bill Joy'un yetenekleri geleceği görmeyi de içermiyordu
DigitalRoss

1
Vermedi bashgelen programlanabilir tamamlama fikrini almak tcsh?

46

Bash'in bunun için iki ayrı yolu var.

  1. Güzel bir kabuk. Tarih değiştirme cshgibi bazı harika özelliklerin !posix sözdizimine entegre edilmesi belki de 2 mermiden biridir (diğeri zsh'dir) . Diziler dahil birçok uzantıya sahiptir.

  2. FSF / GNU kabuğu. Açık kaynaklı dünyada, bu bir çeşit kaşe verir.

Ayrıca her zaman varsayılan olmadığını da eklemeliyim. ashgenellikle / bin / sh olarak kullanılır, böylece bashetkileşimli kabuk olsa ashda, "sadece komut dosyasını çalıştır" kabuğu olur. Bunun nedeni ashdaha küçük ve daha hızlı olması ve posix özelliklerini içermesidir, bu yüzden uygun bir altkümedir. ashEtkileşimli bir kabuk olarak kullanmak bazen sorunlu olabilir. Açıkçası, NetBSD, iyi çalışıyor, çünkü orada tüm özelliklerle inşa edilmiş. Bir tür kabukları, bashdışardaki bir paket. Ancak Linux'ta ashgenellikle etkileşimli olmayanlar olarak kabul edilir, öyleyse onu tarih olmadan ve sadece bu büyük gnu configurebetikleri çalıştırmak için kullanıldığı teorisinde (önemli) satır düzenlemesi olmadan derlerler.

İki Kabuğun Masalı

Kabuğun gerçek tarihi

GÜNCELLEME: Web'de bir yerden bir yere kopyalanan kabuğun yanlış bir geçmişi var ve insanlar anlaşılır bir şekilde buna inanıyor. Doğru bir sürüm vermeye çalışacağım ve burada doğrulamak için birkaç bağlantı sağlayacağım.

  1. İlk kabuk kesinlikle Bourne kabuğu değildi, ancak Ken Thompson tarafından yazılmış ve AT & T'nin çeşitli üniversitelere ve devlet laboratuarlarına gönderilen versiyonları V6'da dağıtılmıştır. İşte Unix'i haritada gösteren budur. Tüm temel özellikleri vardı <, >, >>, |, &, ancak gotostandart girdiler arayan harici bir program aracılığıyla basit bir kontrol sözdizimine sahipti . O zamanlar karmaşık kabuk betikleri yoktu. Daha sonra mermiler komut girişini ayrı bir fd'de açacaktır. Bugün basit görünebilir, ancak 1970'lerin bilgisayarındaki korku filminde dünyadaki en iyi şeydi. İster inanın ister inanmayın, bu eski kabuğun bugün kendi twitter akışına ve tabii ki bir giriş sayfasına sahiptir .
  2. İkinci kabuk olduğu csh, (olduğu gibi yazılı violarak) Bill Joy UCB de. Bu GNU okuma hattı ve NetBSD düzenleme satırından önceydi, bu yüzden !sözdizimi ile tarih yazmak için tamamen makul gözükmeliydi . Csh, günümüzün kabuk özelliklerinin çoğunu ancak csh sözdizimi ile birlikte ekledi. csh herhangi bir sözdizimini değiştirmedi , gratuitously veya başka türlü. Aslında Thompson kabuğuyla uyumluydu ve aslında TS kaynak kodunu içeriyordu.
  3. Üçüncü kabuk, farklı sözdizimi olan Bourne kabuğu idi. Unix, UCB ve AT&T'de paralel olarak geliştirildi. Bu kabuğun tuhaf bir hafıza ayırıcısı vardı (sanırım sadece daha fazla hafıza kullandı, SIGSEGV'i hapsetti, yeni bir brk (2) yaptı ve tekrar denedi), yeni bir Unix portunda çalışmayı zorlaştırdı oshve cshbir süredir popüler oldu. . İnternet yoktu ve SW lisansı verildi, bu ortamda Stephen Bourne'in Joy'un kabuğunu bilmemesi ve kesinlikle Joy'un Bourne hakkında bir şey bilmiyor olması mümkündü. İki mermi, ilk önce UCB bir VAX ve şimdi unutulmuş Unix / 32V'nin bir ön sürümü elde ettiğinde bir araya geldi . Bill'in hafıza tahsisinden şikayet ettiğini hatırlıyorum. Not iki kabuk V6 kabuğuna geriye doğru uyumlu olduğu, sadece sözdizimini farklı yönlerde genişletmişlerdir.
  4. Şimdi AT&T'nin Bourne-uyumlu eklediği çok sayıda uyumsuz kabuk vardı ksh. Sonunda cshyarı kullanılabilir kaynak koduna sahipti, ancak AT&T ve California Üniversitesi arasındaki bir davaya bağlandı . Yine de, bunlar 50.000 $ ücretini karşılayabilecek gelişmiş şirketler AT&T lisansını satın alacak ancak 4.x BSD dağıtımlarını yükleyecek ve üniversiteler ücretsiz aldı.
  5. Bu durumda birçok yasal ve teknik konuda, çeşitli bağımsız uygulamalar yapılmıştır. cshBourne kabuğunun sözdiziminde olduğu gibi en azından çoğu sözdizimi ile gitti ve bazıları ikisini birleştirdi. Sen vardı en azından tcsh, zsh, bash, ve ash. Bourne sözdizimi, AT&T bültenlerinin bir parçası olan "resmi" idi, ancak o günlerde BSD oldukça önemliydi ve Sun, başlangıçta BSD, dünyanın karşılaştığı Unix SW'nin adil bir miktarını dağıttı.
  6. Kısmen USL davası nedeniyle, FSF ve Linux açık bir alana sahipti. Bu arada, AT&T dünyadaki birkaç kişiden biriyle (California Eyaleti) olduğundan daha büyük bir kavga çıkarmayı başarmıştı ve sonunda davayı kazanamadılar ve sonunda BSD dağıtımı yasal bir şekilde gerçekleşti. temel. Fakat o zamana kadar Linux ve bash her yerdeydi ve bu yüzden bugün BSD bir niş.
  7. Son olarak, bash iyi bir kabuktur (görünüşe göre asıl yazarı tarafından özel olarak reddedilmiş olsa da) ve kendi başarısı için krediyi hak ediyor. kül, bash ve ksh sözdizimi savaşını kazanmasa bile csh tcsh ve zsh tarafından tutuluyor olurdu.

Ayrıca, / bin / sh statik olarak bağlanması gerekir.

Herhangi bir şey varsa /binve buna /sbinbağlıysa /usr, bu bozulur ve düzeltilmesi gerekir; sadece içindeki kütüphanelere bağlı olmalıdırlar /lib. Sadece loginPAM'a ihtiyaç var; dinamik lib'ler gerektiren "daha yeni API", NSS olacaktır. "Eğilim"? NetBSD 2.0 zaten tamamen dinamik /binve /sbin5 yıl önce, daha uzun zaman önce FreeBSD 5.2 ve Linux ... dağıtıcıya göre değişiklik gösteriyor, ama bu çok uzun zaman oldu.
efemient

2
Cevabımın asıl işim olduğunu açıkça belirtmek istiyorum; hiçbir yerden hiçbir kelime kopyalanmadı .
Norman Ramsey,

1
Elbette, yapıştırdığınız anlamına gelmedim, sadece bir sürü yanlış bilgi var ve zaten yanlış anlaşılmış bir hikayeyi bildirdiğiniz için sizi korkutmak istemedim.
DigitalRoss

6

@DigitalRoss söylediklerini eklemek için

  • Bash, posix-sh için tam bir süperset değiştirme işlemidir, hatta / bin / sh olarak adlandırılırsa, posix-sh'i tamamen taklit edecek noktaya kadar. Posix-sh, ortak bir payda kabuğu olarak ticari unix sistemleri için "standart" idi. Yani, orada başlayan ve üzerine inşa edilen bir şey çok başlar.

4

Çünkü Linux sadece Çekirdek'dir (ve gerekli destek malzemeleridir), GNU ise "Linux" dediğimiz şeyi kullanılabilir kılan tüm temel Unix yazılım klonlarını sağlar (veya sağlar). Bash, GNU projesinin Unix Versiyon 7'den eski Bourne kabuğunun (sh) klonu olarak yazılmış kabuğudur.


“neden bir kabuk programı var” diye sormuyor
hasen

@ hasen j: Soru, bütün Linux sistemlerinin varsayılan olarak Bash'i kabuk olarak kullanmasının tarihsel bir nedeni olup olmadığı sorulur.
beggs

2
@ hasen j: beggs yanıt vermiyor "neden bir kabuk programı var". Diğer SO diz çöküşlerinin açıkça seçmenleri olduğu gibi, cevabın noktasını kaçırdınız.

1

Bir unix.com araştırmasına göre, ksh'dan daha ileride değil.
/ bin / sh 83 8,96%
/ bin / csh 36 3,89%
/ bin / ksh 370% 39,96
/ bin / tcsh 36 3,89%
/ bin / bash 401 43,30%


0

Bash, zengin özelliklerinden dolayı geniş kabul görüyor. Aynı zamanda C-shell ve Korn-shell gibi diğer mermilerin özelliklerini de benimser. Lütfen bu özelliklere bir göz atın .


0

Çünkü 'bash'% 100 'sh / ksh' ile karşılaştırılabilir ve 'ksh' POSIX kabuğudur.

Yani POSIX uyumlu bir sistem istiyorsanız ve Linux kullanıyorsanız bash kullanın.

Ticari bir unix kullanıyorsanız, genellikle varsayılan kabuk olarak ksh elde edersiniz (bazen sadece eski sh). Nedense Sun hala flakey csh c-shell'e temerrüde geliyor.

Avantajı, hp-ux ya da AIX için yazılmış bir .sh'nin, linux 'bash' olarak herhangi bir değişiklik yapmadan çalışma şansı.


kshPOSIX kabuğu değil . POSIX kabuğu gibi bir şey yoktur . POSIX teknik özelliklerine uyan, bunlardan kshbiri olan, ancak hiçbiri olmayan tek kabukları vardır .

0

Ve diğer tüm cevapları eklemek için: zshgeriye dönük olarak uyumlu olması amaçlanmamıştır. Muhtemelen uyumlu olacak şekilde ayarlayabilirsiniz, ancak özelliklerini kaybedersiniz.

Ben kullanırım zshbenim normal interaktif kabuk olarak, ama bash/ dashdaha aklı başında bana bir kabuk komut dosyası dili olarak görünüyor; daha az sihir yaparlar ve daha tahmin edilebilirler ... bu birkaç yıl çalışacak bir senaryo yazarken benim için daha önemli.


0

Sadece konularda şaşırtmak için, shkomut bazen sadece sembolik gibi başka bir kabuk programına bağlantı vardır ash, bashya da dash.

Ubuntu bağlamak için kullanılan bashbu yana, bashherhangi bir uyumlu Bourne kabuğu komut dosyasını çalıştırmak üzere tasarlanmıştır.

Son zamanlarda, yine de, Ubuntu shbağlantıya geçti dash. komut dosyalarını (ve dolayısıyla komut dosyalarını da dashçalıştıracak bashşekilde sh) tasarlanmıştır, ancak yalnızca komut dosyası için kullanılmak üzere tasarlanmıştır, bu nedenle etkileşimli özelliklerinden yoksundur bash. Bu daha küçük ve (belki de) daha hızlı kılar.

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.