“Sh uyumlu” olmak ne demektir?


63

Genellikle kabuklara atıfta kullanılan "sh uyumlu" ifadesini gördüm. Kabukların içinden çalıştırılabilecek programlar için de geçerli olup olmadığından emin değilim.

Bir kabuk veya başka bir programın "sh uyumlu" olması ne anlama gelir? “Uyumsuz” olmak ne anlama geliyor?

Düzenleme: bash ve sh arasındaki farkı soran bu soru çok alakalı: sh ve bash arasındaki fark

Yine de "sh uyumlu" olmanın ne demek olduğuna doğrudan bir cevap istiyorum. Makul bir beklenti, "sh uyumlu" nun "Kabuk Komuta Dilini uyguladığı" anlamına gelmesi olabilir, ancak o zaman neden bu kadar çok "sh uyumlu" kabuk var ve neden farklılar?


1
Bir kabuk betiği için, bu betiğin Bourne Kabuğu ( sh) ile uyumlu (çalıştırılabilir) sözdizimi kullanıp kullanmadığını belirtir . Farklı bir kabuk için, o kabuğun Bourne kabuk komut dosyalarını çalıştırıp çalıştırmayacağı anlamına gelir.
HalosGhost

Yanıtlar:


116

Neden bu kadar çok "sh uyumlu" mermi var?

Bourne kabuğu ilk halka parçası olarak 1979 yılında yayımlanmıştır UNIX V7 . Neredeyse her Unix ve Unix benzeri sistem V7 Unix’ten geliyor - sadece ruhsal olsa bile - Bourne kabuğu “sonsuza kadar” bizlerle.

Bourne kabuğu aslında daha eski bir kabuğun yerini aldı , Thompson kabuğunu yeniden yaptı , ancak Unix'in tarihinde bugün unutulmuş olan her şeyden önce çok erken oldu. Bourne kabuğu Thompson kabuğun bir kümesidir

Hem Bourne hem de Thompson mermileri çağrıldı sh. POSIX belirtilen kabuk olarak da adlandırılır sh. Bu yüzden, biri shuyumlu olduğunu söylediğinde , el kabiliyetiyle bu mermi dizisine atıfta bulunuyorlar. Özel olmak isteselerdi, "POSIX kabuğu" ya da "Bourne kabuğu" derlerdi.

POSIX kabuk 1988 sürümü dayanmaktadır KornShell da leapfrogging, Bourne, AT & T Unix üzerinde kabuk yerine alacaktı, BSD C kabuk ölçüde features.⁴ açısından kshPOSIX kabuk atası, en Unix ve Unix benzeri sistemler bugün Korn kabuğunun bir türevini içerir. İstisnalar genellikle tam bir POSIX kabuğunun kapladığı alanı karşılayamayan küçük gömülü sistemlerdir.

Bununla birlikte, Korn kabuğu - POSIX kabuğundan farklı bir şey olarak - ticari Unix dünyasının dışında hiçbir zaman popüler olmadı. Bunun sebebi, yükselişinin Unix'in ticarileşmesinin ilk yıllarına tekabül etmesiydi, bu yüzden Unix savaşlarında yakalandı . BSD Unixes, C kabuğu lehine istifa etti ve kaynak kodu başladığında Linux'ta serbestçe kullanılamıyordu. Dolayısıyla, ilk Linux distribütörleri Linux çekirdeği ile gitmek için bir komut kabuğu aramaya başladıklarında, genellikle bahsettiğin uyumlu olanlardan biri olan GNU Bash'ish seçtiler.

Linux ve Bash arasındaki bu erken ilişki ksh, cshve dahil olmak üzere diğer birçok merminin kaderini büyük ölçüde mühürledi tcsh. Bugün hala bu kabukları kullanan kalıplar var, ama azınlıkta çok fazlalar.

Gibi göreceli latecomers yaratıcıları neden Bütün bu tarih açıklar bash, zshve yashonları yapmak için seçti sh-uyumlu: Bourne / POSIX uyumluluğu Unix benzeri sistemler için bir kabuk yaygın kabulünü kazanmak için sağlamalıdır minimumdur.

Birçok sistemde, varsayılan etkileşimli komut kabuğu ve /bin/shfarklı şeylerdir. /bin/sholabilir:

  • Orijinal Bourne kabuğu. Bu, Solaris 10 (2005'te piyasaya sürüldü) ve selefleri gibi eski UNIX® sistemlerinde yaygındır.

  • POSIX sertifikalı bir kabuk. Bu, Solaris 11 (2010) gibi daha yeni UNIX® sistemlerinde yaygındır.

  • Almquist kabuk . Bu, 1989 yılında Usenet'te orijinal olarak piyasaya sürülen, açık kaynaklı bir Bourne / POSIX kabuk klonudur ; bu, daha sonra AT&T kaynak kodu içermeyen ilk BSD sürümünde 4.4BSD-Lite içermeyen Berkeley'in CSRG'sine katkıda bulunmuştur . Almquist kabuğu, olduğu gibi kurulsa bile sık sık denir .ash/bin/sh

    4.4BSD-Lite, /bin/shçoğu notta Almquist türevi olarak kalarak, aşağıda belirtilen ana istisna dışında, tüm modern BSD türevlerinin temelini oluşturdu . NetBSD ve FreeBSD'nin kaynak kod havuzlarında bu doğrudan soyu görebilirsiniz : 1. günden itibaren bir Almquist kabuk türevi gönderiyorlardı.

    ashBSD dünyasının dışında iki önemli çatal var:

    1. dash, Debian ve Ubuntu tarafından 2006 yılında varsayılan /bin/shuygulama olarak benimsenmiştir . (Bash , Debian türevlerinde varsayılan etkileşimli komut kabuğu olmaya devam eder .)

    2. ashKomut içinde BusyBox sık gömülü Linux dağıtımları kullanılır ve uygulamak için kullanılabilir, /bin/sh. Yayınlandığı dashve Debian'ın eski ashpaketinden alındığı için , BusyBox'taki komut adına rağmen, bunun dashyerine bir türev olarak düşünmeyi seçtim ash.

      (BusyBox ayrıca ashçağrılanlara daha az özellikli bir alternatif de içerir hush. Tipik olarak, ikisinden yalnızca bir tanesi herhangi bir BusyBox ikili dosyasına yerleştirilir: ashvarsayılan olarak, ancak hushalan gerçekten çok sıkı olduğunda. Bu nedenle, /bin/shBusyBox tabanlı sistemlerde her zaman dashbenzeri değildir .)

  • GNU Bash , olarak adlandırılan zaman onun POSIX olmayan uzantılarının en devre dışı bırakırsh .

    Bu seçenek, Debian ve türevleri dışında, Linux'un masaüstü ve sunucu varyasyonlarında tipiktir. Mac OS X, 2003'te piyasaya çıkan Panter'den beri bunu da yaptı.

  • ksh93OpenBSD'deki gibi POSIX uzantılı bir kabuk . Her ne kadar OpenBSD kabuğu Bourne ve POSIX mermilerle sözdizimi ve anlamsal uyumsuzlukları önlemek için davranışını değiştirse de sh, daha eski mermilerle çakışmayanlar olarak saf uzantılarının hiçbirini devre dışı bırakmaz.

    Bu yaygın değildir; ksh93özellikleri beklememelisin /bin/sh.

Yukarıda "kabuk betiği", Bourne / POSIX kabuk betiği anlamına gelen genel bir terim olarak kullandım. Bu Bourne ailesi kabukları her yerde olması nedeniyle. Diğer kabuklarda komut dosyası yazmak hakkında konuşmak için, "C kabuk betiği" gibi bir niteleyici vermeniz gerekir. Bir C ailesi kabuğunun varsayılan etkileşimli kabuk olduğu sistemlerde bile , Bourne kabuğunu komut dosyası olarak kullanmak daha iyidir .

O zaman o anlatıyor Vikipedi Unix kabukları sınıflandırır , Bourne içine onlar grup onları, uyumlu C kabuk uyumlu ve kabuk "öteki".

Bu şema yardımcı olabilir:

Unix Kabukları: Bourne, Korn, POSIX, C ve rc Shell Aileleri

(SVG versiyonu, 31 kB için tıklayınız veya tam boyutlu PNG versiyonunu görüntülemek için tıklayınız , 218 kB.)

“Uyumsuz” olmak ne anlama geliyor?

Bir söz Birisi sh-incompatible şey tipik olarak üç şeyden biri şu anlama gelir:

  1. Bu "diğer" mermilerden birine atıfta bulunuyorlar.

  2. Bourne ve C kabuklu aileler arasında bir ayrım yapıyorlar.

  3. Bir Bourne ailesi kabuğunda, diğer tüm Bourne ailesi kabuklarında olmayan belirli bir özellikten bahsediyorlar. ksh93, bashve zshözellikle eski "standart" mermilerde bulunmayan birçok özelliğe sahiptir. Bu üçü, paylaşılan POSIX’in / ksh88üssün ötesine geçtiğinizde, birçok yönden karşılıklı olarak uyumsuz .

Üstünde bir #!/bin/sh shebang satırı bulunan bir kabuk betiği yazmak ancak içinde Bash veya Korn kabuk uzantılarını kullanmak klasik bir hatadır . Yana /bin/shpek çok sistemlerde bu gün yukarıda Korn / POSIX ailesi şemada kabukları biridir tür komut dosyaları üzerinde yazılı sistemde çalışır, ancak daha sonra sistemlerde başarısız olur /bin/shkabukları daha geniş Bourne ailesinden bir şeydir. En iyi uygulama, komut dosyası bu tür uzantıları kullanıyorsa satırları kullanmak #!/bin/bashveya #!/bin/kshshebang kullanmaktır .

Bir Bourne ailesi kabuk betiğinin taşınabilir olup olmadığını kontrol etmenin birçok yolu vardır:

  • Run checkbashisms, üzerinde bir komut dosyası denetler Debian projesinden bir araç " bashisms ."

  • poshYalnızca SUS3 tarafından belirtilen özellikleri ve diğer birkaç küçük özelliği bilerek uygulayan Debian paket havuzundaki bir kabuğu altında çalıştırın .

  • Altında çalıştır oshdan Schily Araçları projesi , Bourne bunun Bourne modern bilgisayar üzerinde kabuk bir 1979 tarzı almak için en kolay yollardan biri haline 2005 yılında OpenSolaris'in kapsamında Sun tarafından kaynaklı olarak açık kabuk arasında iyileştirilmiş bir sürümü.

    Schily Tools dağıtımı ayrıca birçok standart dışı özelliğebosh sahip bir POSIX tipi kabuk içerir ancak tüm POSIX ailesi kabuklarında çalışması amaçlanan kabuk komut dosyalarının uyumluluğunu sınamak için yararlı olabilir. Onun dışında set özelliği daha tutucu olma eğilimindedir , ve yeni versiyonlarının .bashzshksh93

    Schily Tools ayrıca bir kabuk içerir bsh, ancak bu Bourne ailesi kabuğu olmayan tarihsel bir tuhaflıktır .

  • GNU Autoconf kılavuzundaki Portable Shell Programming ( Taşınabilir Kabuk Programlama) bölümünü gözden geçirin . Senaryolarında konuştuğu bazı problemli yapıları tanıyabilirsin.

Neden farklılar?

Aynı nedenlerden dolayı "Yeni ve Geliştirilmiş!" işler farklı:

  • Geliştirilmiş sürüm yalnızca geriye dönük uyumluluk kırılarak iyileştirilebilir.

  • Birisi daha iyi sevdiği, ancak eskisi gibi çalıştığı bir şeyin çalışması için farklı bir yol düşündü.

  • Birisi eski bir standardı tamamen anlayamadan yeniden denemeyi denedi, bu yüzden batırdılar ve kasıtsız bir fark yarattılar.


Dipnotlar ve Yanlar :

  1. BSD Unix'in ilk sürümleri V6 Unix için yeni eklenti yazılım koleksiyonlarıydı. Bourne kabuğu AT & T Unix'e V7'ye kadar eklenmediğinden BSD teknik olarak Bourne kabuğuna sahip olmadı. BSD'nin Thompson kabuğunun ilkel doğasına cevabı C kabuğuydu .

    Bununla birlikte, BSD'nin ilk bağımsız sürümleri (2.9BSD ve 3BSD), V7'ye veya taşınabilir halefi UNIX / 32V'ye dayanıyordu , bu nedenle Bourne kabuğunu da içeriyorlardı.

    (2BSD hattı Digital'in için BSD paralel çatal dönüştü PDP minibilgisayarlarının 3BSD ve 4BSD hatları gibi yeni bilgisayar türlerinden yararlanmak için devam ederken, Vaxen ve Unix iş istasyonları 2.9BSD esasen 4.1cBSD PDP versiyonu vardı;. Olduklarını eş ve paylaşılan kod . VAX geldiğimde 2BSD çizgisi bu nedenle PDPs sadece kaybolmadı hala sürüyerek birlikte .)

    Bourne kabuğunun 1983 yılına kadar Unix dünyasında her yerde olduğunu söylemek güvenlidir. Bu bilgisayar endüstrisinde "sonsuza kadar" yaklaşımı için iyi bir yaklaşımdır. MS-DOS, o yıl hiyerarşik bir dosya sistemine sahipti (awww, ne cuuute!) Ve ilk 24-bit Macintosh 9 "B&W ekranıyla - gri tonlamalı değil, tam anlamıyla siyah ve beyaz - gelecek yılın başlarına kadar çıkmadı.

  2. Thompson kabuğu bugünün standartlarına göre oldukça ilkeldi . Bugün beklediğimiz script programlama ortamı yerine sadece etkileşimli bir komut kabuğu idi. Bir "Unix kabuğunun" prototipik bir parçası olarak düşündüğümüz borular ve G / Ç yönlendirmeleri gibi şeylere sahipti, böylece MS-DOS komut kabuğunu Unix'ten aldıklarını düşünüyoruz .

    Bourne kabuğu da yerini PWB kabuğu programlanabilirliği gibi Thompson kabuğuna önemli şeyler eklendi ( if, switchve while) ve ortam değişkenleri erken formu. PWB kabuğu, Unix'in her versiyonunun bir parçası olmadığı için Thompson kabuğundan bile daha az hatırlanıyor.

  3. Birisi POSIX - Bourne kabuk uyumluluğu konusunda spesifik değilse , onların ifade edebileceği birçok şey vardır.

    Bir uçta, 1979 Bourne kabuğunu taban çizgisi olarak kullanıyor olabilirler. Bir " sh: bu anlamda uyumlu bir komut dosyası" Doğru Bourne kabuğu veya halefleri ve klonların herhangi üzerinde mükemmel olmasının beklendiği anlamına geleceğini ash, bash, ksh, zsh, vb

    Diğer uçtaki biri POSIX tarafından belirtilen kabuğun bunun yerine temel olduğunu varsaymaktadır. Bugünlerde pek çok POSIX kabuğu özelliğini "standart" olarak alıyoruz, genellikle Bourne kabuğunda bulunmadıklarını unutuyoruz: yerleşik aritmetik, iş kontrolü, komut geçmişi, takma adlar, komut satırı düzenleme, $()komut biçimi ikame vb.

  4. Korn kabuğunun kökleri 1980'lerin başlarına kadar gitmesine rağmen, AT&T 1988'de System V Release 4'e kadar Unix'te göndermedi . Çok sayıda ticari Unix, SVR4'ü temel aldığından, bu ksh, hemen hemen her ilgili ticari Unix'i içeriyordu. 1980'lerin sonunda

    (Birkaç garip Unix birliği dayalı SVR3 ve önceki SVR4 serbest bırakılması geçmiş pazarın parçaları üzerine düzenlenen, ama onlar duvara karşı ilk zaman devrim geldi.)

    1988 ayrıca Korn kabuğu tabanlı "POSIX kabuğu" ile ilk POSIX standardının çıktığı yıl oldu . Daha sonra, 1993 yılında, Korn kabuğunun geliştirilmiş bir versiyonu çıktı. POSIX orijinalini etkili bir şekilde çivileştirdiğinden, kshiki ana sürüme ayrılmıştır: ksh88ve ksh93bölünmelerine katılan yıllar sonra adlandırılmıştır.

    ksh88Tamamen POSIX uyumlu değil, farklar küçük olsa da, ksh88kabuğun bazı sürümleri POSIX uyumlu olacak şekilde yamalıydı. (Bu Slashdot’ta Dr. David G. Korn’la yapılan ilginç bir röportajdan . Evet, kabuğu yazan adam.)

    ksh93olan POSIX kabuğun tam uyumlu kümesidir . Geliştirme ksh93olmuştur sporadik birincil kaynak deposu AT & T taşındı beri GitHub'dan için bu, ksh93v yazarken yeni sürümü yaklaşık 3 yaşında olmak. (Projenin temel adı ksh93, 1993'ten sonraki sürümleri belirtmek için eklenen son eklerle kalır .)

    POSIX kabuğundan ayrı bir şey olarak bir Korn kabuğu içeren sistemler, genellikle /bin/kshbazen başka yerlerde saklanıyor olmasına rağmen, onu mümkün kılar .

    kshKorn kabuğu hakkında veya adıyla konuştuğumuzda ksh93, geriye dönük uyumlu Bourne ve POSIX kabuk alt kümelerinden ayıran özelliklerden bahsediyoruz . Sen nadiren saf rastlamak ksh88bugün.

  5. AT&T, Korn'un kabuk kaynak kodunu Mart 2000'e kadar özel tuttu . Bu noktada, Linux'un GNU Bash ile ilişkisi çok güçlüydü. Bash ve ksh93 her birinin diğerine göre avantajları var , ancak bu noktada atalet, Linux'u Bash ile sıkı bir şekilde ilişkilendirmeye devam ediyor.

    Erken Linux satıcıları en sık üzerinde GNU Bash tercih neden olarak pdksh, oldu Linux başlamıştım anda mevcut, ben kullanıcı adasında geri kalanının çok da geldi yüzünden olduğunu tahmin ediyorum GNU projesinin . Bash geliştiricilere göre biraz daha gelişmiş pdksh, çünkü Bash geliştiricileri Korn kabuk özelliklerini kopyalamakla yetinmiyorlar.

    Üzerinde çalışmak pdkshAT & T gerçek Korn kabuk için kaynak kodunu yayınladı zaman hakkında durdu. Bununla birlikte, halen korunan iki ana çatal vardır: OpenBSD pdkshve MirBSD Korn Shellmksh ,.

    mkshŞu anda Cygwin için paketlenmiş tek Korn kabuğu uygulaması olduğunu ilginç buluyorum .

  6. GNU Bash, POSIX’in ötesine birçok yönden gider, ancak sizden daha saf bir POSIX modunda çalışmasını isteyebilirsiniz .

  7. csh/ tcsh1990'lı yılların başlarında BSD Unix'lerdeki varsayılan etkileşimli kabuk oldu.

    Bir BSD değişkeni olan Mac OS X'in ilk sürümleri, Mac OS X 10.2 "Jaguar" aracılığıyla bu yoluydu . OS X tcsh, OS X 10.3 "Panther" içindeki varsayılan kabuğu Bash'den Bash'e geçirdi . Bu değişiklik, 10.2'den veya daha önceki bir sürüme yükseltilmiş sistemleri etkilememiştir. Dönüştürülen sistemlerdeki mevcut kullanıcılar tcshkabuklarını korudu .

    FreeBSD hala tcshvarsayılan kabuk olarak kullanıldığını iddia ediyor , ancak burada bulunan FreeBSD 10 VM'de varsayılan kabuk POSIX uyumlu Almquist kabuk değişkenlerinden biri gibi görünüyor . Bu NetBSD için de geçerlidir.

    OpenBSD, pdkshbunun yerine varsayılan kabuk olarak bir çatal kullanır .

    Linux ve OS X'in yüksek popülaritesi, bazı kişilerin FreeBSD'nin de Bash'e geçmesini istemesini sağlıyor, ancak felsefi nedenlerden dolayı yakın zamanda bunu yapmayacaklar . Bu sizi rahatsız ediyorsa, değiştirmek kolaydır .

  8. /bin/shBugünlerde olduğu gibi gerçekten vanilya Bourne kabuğu olan bir sistem bulmak nadirdir . Uyumluluk testi için kendisine yeterince yakın bir şey bulmak için yolunuzu kapatmalısınız.

    Ben modern bir bilgisayarda bir hakiki 1979 bağbozumu Bourne kabuğu çalıştırmak için tek yol farkındayım: kullanmak Antik Unix V7 ile disk görüntüleri SIMH PDP-11 simülatörü gelen Bilgisayar Tarihi Simülasyon Projesi . SIMH , sadece Unix benzeri olanlar için değil , hemen hemen her modern bilgisayarda çalışır . SIMH bile çalışır Android'de ve iOS'ta .

    İle OpenSolaris'i , Güneş -açmak kaynaklı ilk kez Bourne kabuğunun SVR4 sürümünü. Bundan önce, Bourne kabuğunun V7 sonrası sürümleri için kaynak kodu yalnızca Unix kaynak kodu lisansı olanlara açıktı.

    Bu kod artık geçersiz olan OpenSolaris projesinin geri kalanından birkaç farklı kaynaktan temin edilebilir.

    En doğrudan kaynak Heirloom Bourne kabuğu projesidir . Bu, 2005 OpenSolaris’in yayımlanmasından kısa bir süre sonra ortaya çıktı. Bazı taşınabilirlik ve hata onarım çalışmaları önümüzdeki birkaç ay içinde yapıldı, ancak daha sonra proje geliştirme durdu.

    Jörg Schilling, bu kodun bir versiyonunu Schily Tools paketinde olduğu gibi sürdürmek için daha iyi bir iş oshçıkardı . Bu konuda daha fazla bilgi için yukarıya bakın.

    2005 kaynak kod sürümünden türetilen bu kabukların çok baytlı karakter kümesi desteği, iş kontrolü, kabuk işlevleri ve orijinal 1979 Bourne kabuğunda bulunmayan diğer özellikleri içerdiğini unutmayın.

    Orijinal bir Bourne kabuğu üzerinde olup olmadığınızı söylemenin bir yolu, Thompson kabuğundan geçişi kolaylaştırmak için eklenen belgelenmemiş bir özelliği destekleyip desteklemediğini görmek: ^takma adı olarak |. Yani, gibi bir komut ls ^ moreKorn veya POSIX tipi bir kabukta hata verir, fakat ls | moregerçek bir Bourne kabuğu gibi davranır .

  9. Bazen bir karşılaşmaya fish, scshya rc/esyapışık, ama C kabuk fanlar daha nadir konum.

    rcKabukları ailesi yaygın Unix / Linux sistemlerinde kullanılmaz, ama aile yukarıdaki şemada yer kazandı nasıl olduğu tarihsel önemlidir. Bell Labs'ın işletim sistemi tasarımı konusundaki araştırmalarının bir parçası olarak oluşturulan 10. basım Unix'in halefi olan Bell Labs işletim sisteminden Plan 9'unrc standart kabuğudır . Programlama seviyesinde hem Bourne hem de C kabuğu ile uyumlu değildir; Muhtemelen orada bir ders var.

    En aktif varyantı rcgörüntülenene olduğu Toby Goodwin tutulan bir UNIX dayanmaktadır, rcByron Rakitzis ile klon.


UNOS "command", "bsh" ve en son Bourne Shell ile daha fazla ilişki bilmek istiyorsanız, bana bir not gönderin. Bir ipucu olarak: UNOS komutunun argümanları içeren tek satırlık bir kabuk betiği görevi gören yerleşik bir "yapma" komutu vardı. Bu fikir Bourne Kabuğuna "dosh" olarak aktarıldı ve ksh veya bash'dan alamayacağınız bir parametreye, takma isimlendirmelere izin veriyor.
schily

Pdksh'in kendisinin Forsyth kabuğuna dayandığını belirtmekte fayda var. Bugün çoğunlukla unutulmuş, ancak pdksh mirasında tarihi bir öneme sahip fakat aynı zamanda minix'in bazı versiyonlarının kabuğu olduğu ve msdos'a taşındığı için.
Stéphane Chazelas

25

"sh uyumlu" , tüm uyumlu sistemlerde bulunması gereken temel kabuk olan POSIXsh anlamına gelir . Sh uyumlu bir komut dosyası herhangi bir POSIX uyumlu makinede çalışmalıdır.

O kadar söylemek gerekli nedeni sık olmasıdır /bin/shsembolik köprü ise /bin/bashbazı Bashisms kullanmaya kendilerini beyan komut içine kaymasına izin gelmiştir, shile #!/bin/sh. Bu komut dosyaları kullanmayan sistemler üzerinde çalışmak için başarısız basholarak /bin/shsonsuza bazı ticari Unix'lerdeki dahil ve Debian ve türevleri son zamanlarda.

Özellikle son zamanlarda dashvarsayılan olarak Debian Almquish Shell'in kullanılması eğilimi var sh, çünkü daha küçük ve daha hızlı olması gerekiyordu. Bu eğilim, sözde shsenaryolarda bulunan bu Bashizmi çok vurguladı . Bir şeyi "sh uyumlu" olarak tanımlamak, açıkça POSIX tarafından belirtilen dilde kalarak bu sistemlerle çalışmak üzere tasarlandığını gösterir - tüm kabuklar, bu işlevselliğin bir süpersetini uygular, bu nedenle her yerde çalışması garanti edilir, birbiriyle uyumlu.

Farklı mermiler kendi gelişim geçmişlerine sahiptir ve kullanıcıları için etkileşimli olarak kullanımına ya da ilişkili diziler gibi uzantıları komut dosyası çalıştırmaya yardımcı olacak işlevler eklediklerinden zaman içinde farklı yönlere ayrılırlar. Bir "sh-uyumlu" komut dosyası, Bash'in [[şartnameleri gibi bu standart dışı eklenti özelliklerinden bazılarını kullanır .

POSIX olmayan özelliklerini bashve tcshve zshve diğer cari kabukları tüm faydalıdır ve istediğiniz veya bunları gerekebilir vesilelerle bol vardır. Sadece çalışacağını beyan eden bir komut dosyasında kullanılmamalıdırlar /bin/sh, çünkü shüzerinde çalıştığınız sistemdeki temel uygulamadaki özelliklere güvenemezsiniz .

İlişkisel dizileri kullanması gereken bir komut dosyası, bashyerine çalıştırılmasını sağlamalıdır sh:

#!/bin/bash
declare -A array

Bu her yerde işe yarayacak bash. Genişletilmiş işlevselliğe ihtiyaç duymayan ve taşınabilir olması amaçlanan komut dosyaları kullandıklarını shve temel kabuk komut diline bağlı olduklarını bildirmelidir .

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.