Inspirez-vous des Autotools: respectez le plus petit dénominateur commun de Bourne et du shell POSIX - éventuellement augmenté de sed
- si vous devez écrire quelque chose qui doit fonctionner partout . Il peut exister des systèmes où quelque chose se casse, mais vous pouvez contourner ces problèmes en réécrivant.
Par exemple, certains systèmes anciens ont des problèmes avec des erreurs d'extension dans test
, alias [
:
if [ $foo = bar ] ; then...
donc la pratique Autoconf est de le réécrire entre guillemets avec un préfixe de caractère unique, comme ceci:
if [ x"$foo" = "xbar" ] ; then...
Vous pouvez également utiliser "x$foo"
ici. Cela protège contre la possibilité qui $foo
pourrait être une option valide pour test(1)
, et comme [
c'est un alias pour test
, cela pourrait mal interpréter l'expression. La solution est de mettre en place une situation où l'argument inconnu [
commence toujours parx
, ce qui signifie qu'il ne peut pas avoir de signification particulière pour [
.
(Autoconf recommande également d'utiliser à la test
place de [
, mais cet avis survient en réaction à d'éventuels conflits avec M4 , qui utilise également [
dans sa syntaxe.)
awk est POSIX , donc théoriquement il est disponible partout. C'est même dans Busybox , donc vous aurez une awk
implémentation même dans certains systèmes Linux embarqués très restrictifs. Pourtant, je serais moins surpris de tomber sur un système sans awk
que sed
. Je suppose que cela se résume à la complexité: des outils plus simples sont plus susceptibles de survivre à un triage agressif.
Perl ne fait partie d'aucune norme répandue, POSIX ou autre, vous ne pouvez donc pas compter dessus si vous ne savez rien à l'avance sur l'environnement cible. Perl n'est pas installé par défaut dans:
- Cygwin
- FreeBSD et NetBSD
- installations "minimales" pour certains Linux, y compris Slackware
- de nombreux Linux embarqués qui dépendent principalement de Busybox pour leur espace utilisateur
Le manuel Autoconf contient un chapitre sur la programmation de shell portable qui devrait vous être utile. La dernière section couvre des outils comme sed
, awk
et bien d' autres.