Tire, kül ve sh komut dosyası% 100 uyumlu mu?


16

Çizgi, kül ve sh için yazılmış komut dosyalarının% 100 uyumlu olup olmadığını bilmek istedim?

Kısa çizgi veya kül veya sözdizimi değişikliği için ek özellikler var mı?

Duyduğum kadarıyla, kül doğrudan bir sh soyundan geliyor.


kül bash aşağı çizgili bir şeklidir
Joe

4
Kaynak?
Ash'in

İnsanlar neden her zaman mermi yaratmak yerine bash'a yamalar göndermiyorlar ki bu beni her zaman bulandırıyor. Gerçekten bilmek istiyorsanız, kılavuzu okuyun, örn.man ash
daisy

2
Doğru, bash'ın soyundan değil. Sh (orijinal Bourne kabuğu) soyundan olduklarını söylemek daha kesin olurdu, ama bu da tam olarak doğru değil.
Zlatko

Bu yardımcı programı checkbashisms, komut dosyanızın POSIX uyumlu olduğunu test etmek için kullanabilirsiniz .
bağışlar başarılı bir şekilde

Yanıtlar:


18

Kısa cevap hayır,% 100 uyumlu değiller.

Ancak mermilerin çoğu temel parçalara oldukça yakındır, bu nedenle nadiren tutarsızlıklara çarpacaksınız. Aslında, çoğu mermi eklenen sözdizimi ile değil, sekme tamamlama ve benzeri bazı ekstra özelliklerle çok farklıdır.

Ayrıca, kesin olarak BSD'den Linux'a dashbir tür torun ash- veya liman. Ve hepsi torun ya da farklı uygulamaları olmalıdır sh. Aslında, shçoğu sistemde sadece sembolik köprü üzerinde bash, dashveya başka bir şey. Önemli olan POSIX uyumluluğudur ve standartlara göre komut dosyaları yazdığınızda sorun yaşamazsınız.

Bu mermiler arasındaki fark optimizasyon ve performansta. O zamanlar daha az zengin özelliklere bashsahipler, ancak tamamen meşru mermiler. Bash etkileşimli çalışma için zengin özelliklere sahiptir, ancak daha fazla bellek kullanır.


Ancak komut dosyası kullanımı için uyumludur?
user1115057

Ve bu standardı takip
etsem

Bazı belirsiz özellikler kullanmıyorsanız, birbirleriyle uyumlu olmalıdırlar. Ancak bash betiği kullanırsanız, daha fazla sorun yaşayabilirsiniz.
Zlatko

Asla sh veya ash veya dash ile bash kullanmayı amaçlamamışlardır. Bu belirsiz özellik nedir?
user1115057

1
bash'ın yeni özelliklerinin birçoğu POSIX üzerinde eklemelerdir, bu nedenle bunları kullanıyorsanız, kaydedilemez kod yazmanız giderek daha olasıdır. IIRC [[]] yapısı bile sh cinsinden değildir. Ayrıca, saf bir kabuk komut dosyası yazmıyorsanız, araçlardaki farkın da (sed, grep, awk ... 'nin farklı sürümleri) devreye girdiğini unutmayın.
lynxlynxlynx

1

Bazı sistemlerde, özellikle Debian'ın, / bin / ash'in mevcut olmadığı belirtilmelidir:

$ type ash dash
bash: type: ash: not found
dash is /bin/dash

2
Meşgul kutusu külü olabilir.
muru
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.