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ı?
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ı?
Yanıtlar:
Tarih (araştırma yoluyla değil, Bell Labs insanlarıyla takılmak için çok fazla zaman harcayarak elde edilmiştir):
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.
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 csh
iş kontrolü ve tarih özellikleri için etkileşimli olarak kullandı, ancak Bourne'yi sh
senaryo 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.
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 sh
ancak kayda değer bir gelişme gösterdi. ksh
POSIX 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)
Bell Labs ve AT&T aptalca ksh
açık kaynak gösterememektedir . ksh88
yaygı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.
Ö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
.
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. bash
ve ksh
ayrışır ve ksh
asla 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ı :-)
Bash'in bunun için iki ayrı yolu var.
Güzel bir kabuk. Tarih değiştirme csh
gibi bazı harika özelliklerin !
posix sözdizimine entegre edilmesi belki de 2 mermiden biridir (diğeri zsh'dir) . Diziler dahil birçok uzantıya sahiptir.
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. ash
genellikle / bin / sh olarak kullanılır, böylece bash
etkileşimli kabuk olsa ash
da, "sadece komut dosyasını çalıştır" kabuğu olur. Bunun nedeni ash
daha küçük ve daha hızlı olması ve posix özelliklerini içermesidir, bu yüzden uygun bir altkümedir. ash
Etkileş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ı, bash
dışardaki bir paket. Ancak Linux'ta ash
genellikle etkileşimli olmayanlar olarak kabul edilir, öyleyse onu tarih olmadan ve sadece bu büyük gnu configure
betikleri çalıştırmak için kullanıldığı teorisinde (önemli) satır düzenlemesi olmadan derlerler.
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.
<, >, >>, |, &
, ancak goto
standart 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 .csh
, (olduğu gibi yazılı vi
olarak) 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.osh
ve csh
bir 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. ksh
. Sonunda csh
yarı 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ı.csh
Bourne 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ı./bin
ve buna /sbin
bağlıysa /usr
, bu bozulur ve düzeltilmesi gerekir; sadece içindeki kütüphanelere bağlı olmalıdırlar /lib
. Sadece login
PAM'a ihtiyaç var; dinamik lib'ler gerektiren "daha yeni API", NSS olacaktır. "Eğilim"? NetBSD 2.0 zaten tamamen dinamik /bin
ve /sbin
5 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.
@DigitalRoss söylediklerini eklemek için
Çü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.
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%
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 .
Çü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ı.
Ve diğer tüm cevapları eklemek için: zsh
geriye dönük olarak uyumlu olması amaçlanmamıştır. Muhtemelen uyumlu olacak şekilde ayarlayabilirsiniz, ancak özelliklerini kaybedersiniz.
Ben kullanırım zsh
benim normal interaktif kabuk olarak, ama bash
/ dash
daha 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.
Sadece konularda şaşırtmak için, sh
komut bazen sadece sembolik gibi başka bir kabuk programına bağlantı vardır ash
, bash
ya da dash
.
Ubuntu bağlamak için kullanılan bash
bu yana, bash
herhangi bir uyumlu Bourne kabuğu komut dosyasını çalıştırmak üzere tasarlanmıştır.
Son zamanlarda, yine de, Ubuntu sh
bağ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.