Sed, awk, perl ve sh en taşınabilir hangisidir?


15

Birisi bu araçları taşınabilirlik sırasına göre koyabilir mi? Bunlardan hangisinin en minimal * nix sistemlerde bile bulunacağı kesindir ? Bunlardan herhangi birinin% 100 olduğundan emin misiniz? Benim tahminim sipariş aşağıdaki gibidir:

  1. awk
  2. sed
  3. sh
  4. perl

Ben bourne kabuk varsayılan olmayan sistemleri olduğunu hayal ederken, bazı kabuk varsayılan olarak mevcut olacak, bu her zaman olacak /bin/sh? Muhtemelen bir bourne tipi kabuk değilse değil. Her ikisi de awkve sedPOSIX spesifikasyonunda onları açıklayan sayfalar var, muhtemelen her zaman mevcut olacaklar. Öyle mi? Her ikisinin de herhangi bir * nix'e kurulacağından emin olabilir miyim ? Gömülü sistemler dahil mi?


gömülü sistemler genellikle minimum düzeyde kalmak için taşınabilirliği feda eder. Çoğu POSIX uyumlu değildir.
jordanm

@jordanm, bunlardan herhangi birine sahip olmayabilecekleri anlamına mı geliyor? En azından minimal bir kabuk arabirimi sağlayan bir sistem varsayıyorum. O busybox sağlar biliyorum sh, awkve sedörneğin benim busybox tabanlı NAS için de perl vardır.
terdon

1
Onlara sahip olabilirsiniz, ancak yaptıkları sistemlere göre değişecektir, bu nedenle soru belirtildiği gibi pek mantıklı değildir.
Stéphane Chazelas

@StephaneChazelas ah, o zaman onu daraltmama yardım eder misin? Bunları sistem X'de bulunma olasılıkları açısından sıralamak mümkün değil mi? Deneyimlerim kesinlikle Linux ve birkaç katıştırılmış NAS sistemidir. Bunların 4'ü olmadan asla bir GNU / Linux alamayacağınızı biliyorum, ancak hangilerinin mevcut olduğunu varsaymak için en güvenli olduğu hakkında bir fikir veremez misiniz?
terdon

Yanıtlar:


15

Sed, awk, perl ve sh en taşınabilir hangisidir?

sed, shve awkPOSIX tarafından belirtilen taşınabilir perlbir standart tarafından desteklenmiyor.

Birisi bu araçları taşınabilirliğe göre ayarlayabilir mi?

Uyumlu koda bağlı kalırsanız, üç POSIX komutu için taşınabilirlik sırası bulunmamalıdır.

Bunlardan hangisinin en minimal * nix sistemlerde bile bulunacağı kesindir?

Üç POSIX ve diğer birçok yardımcı program bir işletim sisteminin POSIX olması için zorunludur. Bununla birlikte, bunların en aza indirilmesi veya eksik / uygun olmayan uygulamalar sağlamalarından bazıları eksik olan işletim sistemleri mevcuttur.

Aslında, özgür ve açık kaynaklı Unix benzeri işletim sistemleri (hepsi olmasa da) büyük olasılıkla, denemeleri halinde uyum sürecini geçemezler ve asla denemezler.

Bunlardan herhangi birinin% 100 olduğundan emin misiniz?

Bourne sözdizimi tabanlı bir kabuk içermeyen işletim sistemi gibi bir * nix bulmak şaşırırdım, ancak özellikle gömülü sistemlerde her şey mümkündür.

Benim tahminim sıra şu: Bazı kabuk varsayılan olarak mevcut olacak, bu her zaman / bin / sh olacak?

/bin/shBourne sözdizimi ailesi bir kabuk olması muhtemeldir, ancak POSIX uyumlu sistemlerde bile POSIX uyumlu olduğu garanti edilmez. Örneğin, /usr/xpg4/bin/shSolaris 10 ve daha eski sürümlerde iken /bin/shPOSIX olmayan eski orijinal Bourne kabuğu.


12

Autotools'tan bir ipucu alın: Her yerdesed çalışması gereken bir şey yazmanız gerekiyorsa , Bourne ve POSIX kabuğunun en düşük ortak paydasına (muhtemelen artırılmış olarak) sadık kalın . Bir şeyin kırıldığı sistemler olabilir, ancak bu sorunları yeniden yazarak çözebilirsiniz.

Örneğin, bazı eski sistemler içinde genleşme hataları ile ilgili sorunlar test, aka [:

 if [ $foo = bar ] ; then...

böylece Autoconf uygulama yeniden yazmak olduğunu şöyle, tek bir karakter öneki ile çift tırnak:

 if [ x"$foo" = "xbar" ] ; then...

"x$foo"Burada da kullanabilirsiniz . Bu, $foogeçerli bir seçenek olabileceği olasılığına karşı korur test(1)ve [bir takma ad olduğundan , testifadeyi yanlış yorumlayabilir. Çözüm, bilinmeyen argümanın [her zaman başlayacağı bir durum oluşturmaktır x, yani özel bir anlamı olamaz [.

(Autoconf da testbunun yerine kullanılmasını önerir [, ancak bu tavsiye sözdiziminde de kullanılan M4 ile olası çatışmalara bir tepki olarak ortaya çıkar [.)

awk POSIX'tir , bu yüzden teorik olarak her yerde kullanılabilir. Busybox'ta bile , bu yüzden awkbazı çok kısıtlayıcı gömülü Linux sistemlerinde bile bir uygulamaya sahip olacaksınız . Yine de, ben olmadan bir sistem rastlamak az şaşıracaksın awkdaha sed. Sanırım karmaşıklığa geliyor: daha basit araçların agresif triyajda hayatta kalma olasılığı daha yüksektir.

Perl herhangi bir yaygın standardın, POSIX'in veya başka bir şeyin parçası değildir, bu nedenle hedef ortam hakkında önceden hiçbir şey bilmiyorsanız buna güvenemezsiniz. Perl varsayılan olarak şu ülkelerde yüklü değildir:

  • Cygwin
  • FreeBSD ve NetBSD
  • Slackware dahil bazı Linux'lar için "minimal" kurulumlar
  • kullanıcıları için öncelikle Busybox'a dayanan birçok gömülü Linux

Autoconf kılavuzunda, taşınabilir kabuk programlama hakkında size yardımcı olacak bir bölüm bulunmaktadır . Geçen bölümde kapakları araçları gibi sed, awkve diğerleri.


Teşekkürler, ancak bunların taşınabilirlik sırasını merak ediyorum. Seni doğru okursam, bunu önerirsiniz shve seden taşınabilir olanıdır. Tamam, diğerleri ne? Ve olan shbu taşınabilir gerçekten? Varsayılan kabuk bir C kabuğu türevi ise ne olur? Böyle bir sistemde hala bir sembolik bağlantı olacak /bin/shmı?
terdon

Düzenleme için teşekkürler, her ikisi de aynı şeydir sedve awkbusybox tarafından sağlanır, neden sedeksik bulmak neden daha şaşıracaksınız ? Meşgul kutusu alternatiflerinin sed ve awk sağlayıp sağlamadığı hakkında bir fikriniz var mı?
terdon

Re: POSIX vs Bourne kabuğu , ikisinin LCD'ye yapışmasını tavsiye yazdı. Re: test alıntı , bunun nedenini yanlış hatırladım, ancak Autoconf kılavuzunda nedenin kapandığı bölümü buldum ve cevabı buna göre düzenledim. Re: sed vs awk ve Busybox , açıkladım: daha fazla karmaşıklık ve triyaj. seddaha az yapar, bu nedenle ikili değeri daha küçük olacaktır, bu nedenle onu kaldırmak için daha az neden vardır awk, bu da oldukça karmaşıktır. (Sistemimde 20 kiB vs 48 kiB.) Re: Busybox alternatifleri , başka bir one-stop-alışveriş alternatifinin farkında değilim.
Warren Young

+1 Buradaki genel önermenize katıldığım için (en düşük ortak payda bir tür sh- terdon sıralamasında awkve bu o_O'nun sedüstünde mi?) Bu, Autotool'un amaçlarına rastlantısal olmasına rağmen, bazı ortamlar, özellikle küçük olanlar, bina, dönem için tasarlanmamış olabilir.
goldilocks

1
@WarrenYoung merak ettiğim bir şeydi. Tüm * nix sistemlerinin aslında varsayılan olarak yüklü bir bourne kabuğu olup olmadığı hakkında hiçbir fikrim yoktu. Eğer hepsinde bir tane varsa /bin/sh, o zaman işler farklıdır ama hepsinin bir tane olacağını bilmiyordum . Bu arada kabul etmediğim için üzgünüm, seninle jlliagre'in cevapları arasında kaldım, ikisi de sorumu yanıtladı. Onun seçtim çünkü daha doğrudan ele aldı ve daha az temsilcisi var :).
terdon
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.