Bonjour,
Sous ce titre se cache un mini casse-tête...
Je viens de me battre un moment pour comprendre pourquoi des "vieux" cas tests écrits dans un Makefile ne voulaient plus passer "comme avant" sous mon ancienne Mandriva, alors que maintenant ils tournent sur Debian Wheezy.
default:
echo -e "A\nB" > test-make-echo.log
wc test-make-echo.log
En fait, "make" produit un fichier "test-make-echo.log" étrange. L'option "-e" a fini dans le fichier !
Et tout le problème est de savoir quel est ce "echo": la version interne du Bash ou la version externe "/bin/echo"...
Après m'être posé pleins de questions, j'ai compris que:
- make utilise "/bin/sh" comme SHELL
- sur Debian il s'agit de "Dash" et non pas "Bash"
- la fonction interne "echo" de Dash ne connaît que l'option "-n", le remplacement des échappements étant appliqué par défaut
La guerre des Shell a encore frappé. Il y a probablement plein de bonnes raisons pour ne pas respecter la syntaxe de "/bin/echo" dans une (re-)implémentation interne mais c'est vraiment terrible pour la portabilité.
La solution est simple: ajouter "SHELL = /bin/bash" dans le Makefile... Car je me suis dit que changer le lien "/bin/sh" (qui n'est pas une "alternative") par "bash" avait toutes les chances de faire planter le boot de Debian.
--
Yves Martin