Ana akım * NIX kabukları arasındaki temel farklar nelerdir? [kapalı]


52

Ana akım * NIX kabukları arasındaki temel farklar nelerdir ve hangi senaryolardan birini diğerinden kullanmanız istenebilir? Bazılarının muhtemelen kullanıcının tercihine bağlı olduğunu biliyorum, ancak yalnızca bash kullandım ve başka bir kabuğun nerede yararlı olabileceğini duymakla ilgileniyorum.

Ayrıca, bir kabuk altında veya diğerinde çalışırken kullanıcının yazdığı kabuk komut dosyaları üzerinde bir etkisi var mı, yoksa sadece dosyanın üstündeki kabuğu değiştirmek mi? İçgüdülerim o kadar kolay olmadığını söylüyor.

Yanıtlar:


52

Etkileşimli kullanım için, iki ana yarışmacı vardır: bash ve zsh , ayrıca straggler tcsh ve yeni balık .

  • Bash, GNU projesinin resmi kabuğu ve çoğu Linux dağıtımında varsayılan kabuktur. Temel kurulumun bir parçası olarak iyi bir etkileşimli kabukla teslim edilmeyen diğer birliklerde, bence insanların seçim yapma eğilimi gösterdiği, kendi kendini güçlendiren “bash her yerde, bu yüzden onu kullanacağım” döngüsünde. Ayrıca bakınız Neden bash her yerde? (birçok tarihi bilgi ile).

  • Zsh, bash'ın neredeyse her özelliğine ve daha birçok (faydalı!) Özelliğe sahiptir. Başlıca olumsuz tarafı daha az tanınmaktadır; pratik bir mesele olarak, başka birisinin kurduğu bir sisteme zaten kurmuş olma olasılığınız daha düşüktür ve bununla ilgili daha az üçüncü taraf dokümantasyonu vardır. Ayrıca bakınız Hangi zsh özelliklerini kullanıyorsunuz? , Hangi özellikler zsh ve bash eksik veya tam tersi? .

  • Tcsh bir zamanlar (1990'ların başına kadar) öncül csh gibi en iyi etkileşimli özelliklere sahip bir kabuktu. Bu etkileşimli kullanım için popüler (ancak komut dosyası için değil ) yaptı. Zsh, tcsh'ı yakaladı ve oldukça hızlı bir şekilde daha da gelişti ve 2000'lerin başlarında bash yakalandı (programlanabilir şekilde tamamlandı). Bu nedenle tcsh'yi şimdi öğrenmek için çok az neden var.

  • Balık öncekilerden daha temiz olmaya çalışır. Bazı düzgün özelliklere sahiptir (daha basit sözdizimi, komut satırında sözdizimi renklendirmesi), ancak başkalarından yoksun (yazar ne beğenirse). Balık topluluğu, zsh'ninkinden çok daha küçüktür ve etkileri daha keskindir. Ayrıca bakınız Balık ve zsh arasındaki farklar nelerdir? .


Komut dosyası için, komut dosyalarınızın ne kadar taşınabilir olmasını istediğinize bağlı olarak hedeflemek isteyebileceğiniz birkaç dil vardır.

  • Unix benzeri gibi görünen her şeyin bir Bourne tarafından onaylanmış kabuğu vardır /bin/sh. POSIX uyumlu /bin/sholmayan yerlerde hala bazı ticari birlikler var .

  • Hemen hemen her çalışan Unix sh, en azından en azından POSIX.2-1992 ve genellikle en az POSIX: 2001 aka Single Unix v3 ile uyumlu bir çalıştırılabilir dosyaya sahiptir . Bu kabuk /usr/bin/posixveya gibi farklı bir dizinde yaşayabilir /usr/xpg6/bin. POSIX öykünme katmanları da, onu destekleyecek kadar güçlü olan her sistem için çekici bir hedef haline gelir.

  • Birçok Unix sistemleri var ksh93 (diziler, ilişkisel diziler, genişletilmiş globs (bazı çok kullanışlı POSIX sh yoksun özellikler getiriyor *(foo), @(foo|bar)...), boş globs ( ~(N)foo*...)). Ksh başlangıçta ticari bir yazılımdı (bazı alışkanlıklar ortaya çıktıktan sonra 2000 yılında serbest kaldı) ve pek çok özgür sendika (Linux, * BSD), yalnızca bu yararlı özelliklerin çoğundan yoksun, çok daha eski bir ücretsiz klon ( pdksh ) sağlama alışkanlığını kazandı . Pdksh şu anda OpenBSD dışında mksh ile yer değiştiriyor , ancak mksh bile tüm ksh93 özelliklerinin uygulanmasında yetersiz kalıyor. Bugün, ksh93'ün her yerde, özellikle de bash'ın norm olduğu Linux'ta mevcut olduğuna güvenemezsiniz.

  • Bash her zaman Linux'ta (bazı gömülü varyantlar hariç) ve çoğu zaman diğer birliklerde bulunur. Bazen farklı bir sözdiziminde olmasına rağmen, ksh93'ün kullanışlı özelliklerinin çoğuna sahiptir.

  • Zsh , ksh93 ve bash'in faydalı özelliklerinin çoğuna sahiptir. Çekirdek sözdizimi temiz ama Bourne ile uyumlu değil. MacOS dışında, yüklemediğiniz bir sistemde mevcut olan zsh'ye güvenmeyin.

  • Daha gelişmiş komut dosyaları için, Perl veya Python'a dönebilirsiniz . Bu diller uygun veri yapılarına, uygun metin manipülasyon özelliklerine, uygun işlem kombinasyonuna ve iletişim mekanizmalarına ve tonlarca kullanılabilir kütüphaneye sahiptir. Çoğu unix sisteminde ya işletim sistemi ile birlikte verilen ya da yönetici tarafından yüklenen (her biri en az birine sahip olmayan nadir bir sistem olduğu için çok fazla Perl ve Python betiği vardır) var.


4
Komut dosyası için, en az özellik ayarına sahip olan ve en fazla uyumluluk için posix şikayeti olan (bash'in gelişmiş özelliklerine ihtiyacım yoksa) tire'yi hedeflerim. (ve küçük ışık ve hızlı)
hildred

Harika belgesel! İki not. Birincisi, Solaris , "/ bin / sh 'in POSIX uyumlu olmadığı ticari birlikler" den biri. Spesifik olarak, bu kullanır jsh(ki olmayan bir java kabuk!) Gibi değişken ikame yoksun olan ${VAR#foo}ve ${VAR%bar}.
Adam Katz,

İkincisi, tcsh(hem tanıtımı gördüm ~ 90'ların ortalarından önce kendi hileler öğrendim UNIX kullanıcıları arasında oldukça popüler olan bashve zshözellikle yaşlı UNIX + arasında) Cile hayata başladı geliştiriciler, csh(hatırlatma, c içinde cshiçin standlar Cdili burne tarzı mermilerden farklılıklarından dolayı ilham kaynağı olmuştur). Ayrıca POSIX derin sihiriyle ilgili ipuçlarında sıkça kullandığım (csh karşıtı argümanlarına ek olarak) Csh programlamanın zararlı olduğunu düşündüm .
Adam Katz

Mac OS X asla "OS / X" değildir. (: Ve zsh, Bourne ile nasıl uyumsuz? (Eh, sözcük bölme değişken açılımları gibi şeyler hariç.)
SilverWolf

@seaturtle Sözcüğü bölme değil değişken açılımları, onları zsh ile çalıştırmaya çalışırsanız (sh / ksh emülasyon modunda zsh çalıştırmazsanız) birçok sh komut dosyasını kırabilecek en büyük farktır.
Gilles 'SO- kötülük yapmayı bırak'

27

İki temel kabuk kabuğu vardır, sh (örneğin, bash) ve csh (örneğin, tcsh). Etkileşimli kullanım için, çoğunlukla alışık olduğunuza gelir. Yıllarca csh kullandım, sonra da tcsh kullandım ve buna alışkın olduğum için geçiş yapmak acı verici olurdu. Ben de bash kullandım ve geçiş yapmak için hiçbir zorlayıcı sebep olduğunu sanmıyorum. Belki biri veya diğeri düzenli kullandığınız makinelerde bulunmuyorsa.

Programlama için, sözdizimi farklıdır. Sadece kabuğu değiştiremezsiniz, ancak komut dosyasının söz dizimini de değiştirmeniz gerekir. Komut dosyası için sh veya bash kullanmak istiyorsunuz. Sözdizimi burada açıklandığı gibi kodlamaya çok daha uygundur ( bağlantı için Riccardo Murri sayesinde . Bash komut dosyası için iyi bir rehberdir) .

Eğer bir kabuğa karar vermediysen ve bazı senaryolar yazmayı düşünüyorsan, öğrenmen gereken şeyleri azaltmak için bash kullanırdım.


12

Eskiden AT&T UNIX'i icat ettiğinde Steve Bourne tarafından yazılmış Bourne Shell vardı. Oldukça basitti ve bugünlerde kullanmamız gereken birçok araç yoktu.

AT&T gerçekten UNIX işinde değildi, bu yüzden çok temel işletim sistemi Berkelely tarafından bir şekilde benimsendi ve BSD UNIX’te bazı değişiklikler yaptılar. Birçok değişiklik arasında, iş kontrolü daha iyi etkileşimli kullanım vb. Dahil olmak üzere sh üzerinde çok fazla iyileştirme yapılmış olan csh adında yeni bir kabuk vardı. Ne yazık ki, sh programlama sözdiziminin C kodlama stillerinden kopyalanan kendilerini (bir şekilde kötü şekilde) emdikleri ve yarattıklarına karar verdiler. (Klasik bir rant http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ dir. ) Yani şimdi iki sözdizimi vardı.

Daha sonra, CSH'de sekme tamamlama ve başka şeyler ekleyerek iyileştirmeler yaptılar. Bu tcsh oldu ve CSH kullanıyorsanız, kullandığınız muhtemelen budur.

AT&T, UNIX işinden tamamen uzak olmadığına karar verdi ve onlar da parlattı. David Korn (iyi adam) Korn kabuğunu yarattı. Bourne kabuğu sözdizimini genişletme fikrine dayanarak, hem programcılar hem de etkileşimli kullanım için birçok şey ekledi. Aslında birkaç versiyon var ve varyasyonları belirten ksh88 ve ksh93 gibi şeyleri nadiren görebiliyorsunuz.

Sonra FSF ve GNU işletim sistemi geldi. Kendi UNIX uyumlu işletim sistemlerini Hurd adında yapmak istediler ve bunun için daha iyi bir kabuk istediler. Bourne Again SHell için bash dediler. POSIX kuralları tam da bu sırada ortaya çıktı ve POSIX kabuğunu oluşturmak istediler . Bourne kabuğundan sözdizimini ve Korn kabuğundan gelen gelişmeleri alarak tcsh'den etkileşimli özellikleri çalmak ve genişletmek için etrafa bakıyorlardı. Linux'ta fiili bir kabuk haline geldi, bu yüzden çok yaygın.

Ayrıca 'nihai' kabuk olarak yazılmış zsh var. Ayrıca Linux dünyasında çok yaygındır. Bash'ı uzattı (ve çapraz biraz tozlaştı, bazı yeni şeyler bash'a döndü).

Eğer bir kabuk seçersem, bash veya zsh seçerdim. bash muhtemelen zsh'dan bir kaç yerde daha olabilir. zsh daha güçlü, ama bash benim için iyi oldu. Real / bin / sh Bourne kabuğu sadece tarihsel nedenlerden dolayı buralarda. bash, ksh'nin sunduğu her şeye ve daha fazlasına sahip. Sözdizimi csh veya tcsh'dan daha temizdir ve ikisinden de daha iyi özelliklere sahiptir.

Bir betiği dönüştürmek, neyin ne olduğuna bağlıdır. Bourne kabuğu stili (sh, ksh, bash, zsh) ya da csh stilinden (csh, tcsh) zor olacaktır. Eskiden yeniye gitmek (/ bin / sh => bash, / bin / ksh => zsh) diğer yoldan daha kolay olacaktır.


Csh-whynot sayfasının Eylül 1995'te tekrar yazıldığını unutmayın (en üstteki sürüm etiketini kontrol edin). Bilmiyorum, ancak o zamandan bu yana 18 yıl içinde birçok şeyin değişmesini beklerdim.
CVn

8

Kabukların iki ana kolu Bourne kabuğu türevleri (sh, bash, ksh, kül, yash ve zsh) ve csh türevleridir (tcsh ve ... uhm ... tcsh).

En yaygın kullanılanın bash olduğunu sanmıyorum (gerçek numaralarım olmasa da), çoğu linux'taki varsayılan kabuk gibi görünüyor.

Bir bourne kabuğu türevinde yazılan çoğu şey muhtemelen başkalarında çalışacaktır. Bir Bourne kabuğuna yazılmış çoğu şeyin muhtemelen csh veya tcsh altında çalışacak şekilde değiştirilmesi gerekecektir.

Şahsen başladığımda ksh kullandım çünkü kullandığım sistem buydu. Ben çoğunlukla şimdi bash kullanıyorum.


1
balık bir csh ilham kabuğudur
hildred

1

Zamanla çok sayıda kabuk kullandım. Süper gelişmiş bir şey değil, yeterince kişiselleştirme gerektiren çok sayıda pratik sysadmin ve programlama malzemesi.

Bence zsh daha çok özelleştirme seçeneğine sahip, en azından alışkın, ancak uzun yıllar kullandıktan sonra kararlılığı ve karakter kodlaması sorunları ile yeterince yetti. Bash kaya gibi sağlam, hiçbir zaman benzer problemler yaşamamış ve her yere kurulmuştu.

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.