Sh nedir
sh(veya Kabuk Komut Dili) POSIX standardında tanımlanan bir programlama dilidir . Birçok uygulamaları vardır ( ksh88, dash, ...). bashayrıca bir uygulama olarak düşünülebilir sh(aşağıya bakınız).
Çünkü shbir uygulama değil, bir belirtim, /bin/shçoğu POSIX sisteminde gerçek bir uygulamaya yönelik bir sembolik bağlantıdır (veya sabit bir bağlantıdır).
Bash nedir
bashshuyumlu bir uygulama olarak başladı (POSIX standardını birkaç yıl geçmesine rağmen), ancak zaman geçtikçe birçok uzantı elde etti. Bu uzantıların çoğu geçerli POSIX kabuk komut dosyalarının davranışını değiştirebilir, dolayısıyla tek başına bashgeçerli bir POSIX kabuk değildir. Aksine, POSIX kabuk dilinin bir lehçesidir.
bash--posixPOSIX uyumlu hale getiren bir anahtarı destekler . Ayrıca çağrılırsa POSIX'i taklit etmeye çalışır sh.
sh = bash?
Uzun süredir, çoğu GNU / Linux sistemine /bin/shişaret /bin/bashediyordu. Sonuç olarak, ikisi arasındaki farkı görmezden gelmek neredeyse güvenli hale gelmişti. Ancak bu son zamanlarda değişmeye başladı.
İşaret /bin/shetmeyen bazı sistem örnekleri /bin/bash(ve /bin/bashhatta bazıları mevcut olmayabilir):
- Varsayılan olarak symlink
shyapan modern Debian ve Ubuntu sistemleri dash;
- Busybox , genellikle Linux sistem açılışında bir parçası olarak çalıştırılır
initramfs. ashKabuk uygulamasını kullanır .
- BSD'ler ve genel olarak Linux dışındaki tüm sistemler. OpenBSD
pdksh, Korn kabuğunun soyundan geliyor. FreeBSD'ler shorijinal UNIX Bourne kabuğunun torunudur. Solaris'in shuzun bir süre POSIX uyumlu olmayan bir özelliği vardır; Heirloom projesinden ücretsiz bir uygulama elde edilebilir .
/bin/shSisteminizde nelere dikkat edeceğinizi nasıl öğrenebilirsiniz ?
Komplikasyon, /bin/shsembolik bir bağlantı veya sert bir bağlantı olabilir. Sembolik bir bağlantıysa, bunu çözmek için taşınabilir bir yol:
% file -h /bin/sh
/bin/sh: symbolic link to bash
Zor bir bağlantıysa deneyin
% find -L /bin -samefile /bin/sh
/bin/sh
/bin/bash
Aslında, -Lbayrak sembolik ve sabit bağları hem kapsar, ancak bu yöntemin dezavantajı taşınabilir olmadığıdır - POSIX gerektirmez find desteklemek için -samefilehem de, seçenek GNU bulmak ve FreeBSD bulmak destekleyeceğini bunu.
Mesele hattı
Sonuçta, «shebang» satırını yazarak hangisini kullanacağınıza karar vermek size kalmış.
Örneğin
#!/bin/sh
kullanacak sh(ve işaret etmek için ne olursa olsun),
#!/bin/bash
kullanacaktır /bin/bashSunulursa, (ve eğer o değil bir hata iletisiyle başarısız). Elbette başka bir uygulama da belirtebilirsiniz, ör.
#!/bin/dash
Hangisini Kullanmalı
Kendi senaryolarım shiçin aşağıdaki nedenlerden dolayı tercih ederim :
- standartlaştırılmıştır
- öğrenmesi çok daha basit ve kolaydır
- POSIX sistemlerinde taşınabilir - sahip olmasalar bile, sahip
basholmaları gerekirsh
Kullanmanın da avantajları vardır bash. Özellikleri, programlamayı daha modern ve diğer modern programlama dillerinde programlamaya benzer hale getirir. Bunlar, kapsam dahilindeki yerel değişkenler ve diziler gibi şeyleri içerir. Plain shçok minimalist bir programlama dilidir.