Sh nedir
sh
(veya Kabuk Komut Dili) POSIX standardında tanımlanan bir programlama dilidir . Birçok uygulamaları vardır ( ksh88
, dash
, ...). bash
ayrıca bir uygulama olarak düşünülebilir sh
(aşağıya bakınız).
Çünkü sh
bir 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
bash
sh
uyumlu 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 bash
geçerli bir POSIX kabuk değildir. Aksine, POSIX kabuk dilinin bir lehçesidir.
bash
--posix
POSIX 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/sh
işaret /bin/bash
ediyordu. 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/sh
etmeyen bazı sistem örnekleri /bin/bash
(ve /bin/bash
hatta bazıları mevcut olmayabilir):
- Varsayılan olarak symlink
sh
yapan modern Debian ve Ubuntu sistemleri dash
;
- Busybox , genellikle Linux sistem açılışında bir parçası olarak çalıştırılır
initramfs
. ash
Kabuk uygulamasını kullanır .
- BSD'ler ve genel olarak Linux dışındaki tüm sistemler. OpenBSD
pdksh
, Korn kabuğunun soyundan geliyor. FreeBSD'ler sh
orijinal UNIX Bourne kabuğunun torunudur. Solaris'in sh
uzun bir süre POSIX uyumlu olmayan bir özelliği vardır; Heirloom projesinden ücretsiz bir uygulama elde edilebilir .
/bin/sh
Sisteminizde nelere dikkat edeceğinizi nasıl öğrenebilirsiniz ?
Komplikasyon, /bin/sh
sembolik 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, -L
bayrak sembolik ve sabit bağları hem kapsar, ancak bu yöntemin dezavantajı taşınabilir olmadığıdır - POSIX gerektirmez find
desteklemek için -samefile
hem 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/bash
Sunulursa, (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 sh
iç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
bash
olmaları 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.