Kabuğa özgü olmayan nedir?


9

Bazı yanıtlar altında, yanıtlarda kabuğa özel komutlardan kaçınmayı öneren yorumları görüyorum.

Tüm mermilerde hangi komutların, operatörlerin, vb. Bulunduğunu nasıl bilebilirim? Standartların bir listesi var mı?

  • man builtinskomutların bir listesini verir. Tüm kabuklarda çalışan taşınabilir bir kabuk komut dosyasında kullanabileceğim tek komutlar bunlar mı?
  • Yerleşik bir mermiye özgü olabilir mi?
  • Linux standartları diğer Unix'lerden farklı mıdır?
  • Sözdizimi ne olacak? Bazı kabuklarda noktalama işaretleri, operatörler vb. Farklı olabilir mi?

Yanıtlar:


12

Greg's Wiki'nin Dash için bash betiklerini uyarlama konusunda bir çok 'bashisms' işaret eden bir yazı var - standart olmayan ancak bash'ın bir parçası olan ekstra özellikler. Bu bashism'lerden kaçınmak, betiğinizi farklı ortamlara daha dost hale getirmeye yardımcı olabilir. Bu özellikle bazı sorularınızı yanıtlar. Örneğin, evet, farklı (örneğin ==) operatörler var , ancak tüm ortamlarda çalışması gereken standart bir Posix seti var.

Daha ayrıntılı bir okuma için, tüm mermilerin uyması gereken Posix standardına göz atabilirsiniz . Özellikle, "Shell & Utilities" bölümü.

Kabuk farklılıklarından daha zor bulduğum şey komut farklılıkları. Birçok Linux sisteminde GNU vardır find, ancak taşınabilir bir komut dosyası yazıyorsanız, kendi başınıza güvenmeyin man find, çünkü BSD ile findfarklı bir özellik kümesine sahip çok sayıda sistem var . Meşgul kutusu için komut dosyaları yazıyorsanız, tamamen farklı ncs içeren farklı sürümler olduğunu göreceksiniz . Bunlar bir senaryoyu farklı ortamlara dağıtırken beni her zaman yakalayan şeyler.

İyi kabuk komut dosyası uygulamaları hakkında ek okuma için, David Pashley'in blogunda da iyi bir kaynak vardır: Sağlam Bash Kabuk Komut Dosyaları Yazma

Ayrıca, Gilles'in bu sitedeki cevaplarını ve yorumlarını okuduğunuzdan emin olun . Taşınabilir kod kullandığınızdan emin olmak için birçok ipucu var.


5

Bir kabuk betiğinin belirli bir kabukta yazılması, o kabuğun kurulu olması anlamına gelir. Tek standart, tüm Unix varyantlarına sahip olmak cshve bunları shkurmaktır. Yani, betiğinizin Solaris, * BSD ve GNU üzerinde çalışmasını istiyorsanız, bunu Bourne kabuğuna yazmanız gerekir.

Bununla birlikte, çoğu Unix komutunun farklı uygulamalar altında farklı sözdizimleri vardır - psSolaris, FreeBSD ve GNU altında bakın - bu nedenle kullandığınız araçlara bağlı olarak, komut dosyanız yine de taşınabilir olmayabilir. Kabuğun nereye kurulduğu da önemli olacaktır. Öyle mi /bin/bash /usr/bin/bash, /usr/local/bin/bashyoksa başka bir yerde mi?

Bir kabuğu tanımlayan standartların farkında değilim. Garip standart dışı mermiler için rc veya http : //192.220.96.201/es /es-usenix- winter93.html`"> e bakın, ancak bunlar hala bazı ortak fikirlere uyuyor gibi görünüyor.


7
POSIX sh'yi tanımlar.
Random832
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.