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.