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, $foo
geçerli bir seçenek olabileceği olasılığına karşı korur test(1)
ve [
bir takma ad olduğundan , test
ifadeyi 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 test
bunun 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 awk
bazı ç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 awk
daha 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
, awk
ve diğerleri.