Salut le(s) dev(s) français de la SME Server,
Dans les derniers bouts de code que j'ai inspecté j'ai eu mal aux yeux. On ne peut pas dire que c'est des bogues mais ça risque de poser des soucis de maintenabilité de ton(votre) code dans le futur.
Il existe plusieurs interpréteur de commandes : sh, csh, ksh*, bash*, dash, etc... Il est important de comprendre les différences entre les différents interpréteurs (norme POSIX) parce qu'ils ne servent pas pour faire les mêmes choses et que surtout ils ne sont pas forcément compatibles entre eux !
Pour REDHAT family man sh pointe sur man BASH, sur DEBIAN family man sh pointe sur man DASH mais sur FREEBSD man sh pointe bien sur man SH

En clair, un script écrit sur REDHAT avec bash ne sera pas utilisable sur DEBIAN ou sur FREEBSD. (cf
https://wiki.ubuntu.com/DashAsBinSh qui explique plutôt bien la situation et le pourquoi du changement de langage pour les scrips shell)
En quoi ça vous concerne?
Ca peut vous aider à progresser au niveau des bonnes pratiques, de conserver un maximum de compatibilité avec la norme POSIX et donc de garantir la portabilité des scripts. L'utilisation du bash ne se justifie pas dans tous les cas.
Si vous codez sur DEBIAN Jessie par exemple et que vous utilisez /bin/bash peut-être qu'un jour les scripts ne seront plus fonctionnels sur REDHAT, si REDHAT choisi de basculer sur /bin/dash.
Prenons l'exemple des scripts check4contribsupdates et check4updates situés dans /sbin/e-smith dans la SME 9 :
cat /sbin/e-smith/check4updates
#! /bin/bash
mkdir -p /tmp/check4updates.$$
TMPFILE=`mktemp /tmp/check4updates.$$/XXXXXXXXXX` || exit 1
TMP1=`mktemp /tmp/check4updates.$$/XXXXXXXXXX` || exit 1
MAILADDR=admin-yum
yum -e 0 -d 0 check-update > $TMP1
if [ $? = 100 ]; then
echo -e "===\n=== yum reports available updates:\n===" >> $TMPFILE
cat $TMP1 >> $TMPFILE
fi
if [ -s $TMPFILE ]; then
if [ "$1" = "-m" ]; then
mail -s "Updates available for `hostname`" $MAILADDR < $TMPFILE
else
echo "Updates available for `hostname`"
cat $TMPFILE
fi
fi
rm -f $TMPFILE $TMP1
rm -fr /tmp/check4updates.*
et
cat /sbin/e-smith/check4contribsupdates
#! /bin/bash
mkdir -p /tmp/check4contribsupdates.$$
TMPFILE=`mktemp /tmp/check4contribsupdates.$$/XXXXXXXXXX` || exit 1
TMP1=`mktemp /tmp/check4contribsupdates.$$/XXXXXXXXXX` || exit 1
MAILADDR=admin-yum
yum -e 0 -d 0 check-update --disablerepo=* --enablerepo=smecontribs > $TMP1
if [ $? = 100 ]; then
echo -e "===\n=== yum reports available updates for Contribs :\n===" >> $TMPFILE
cat $TMP1 >> $TMPFILE
echo -e "\n To apply all these updates, you can log on your server and run the following command :\n
yum update --enablerepo=smecontribs\n" >> $TMPFILE
fi
if [ -s $TMPFILE ]; then
if [ "$1" = "-m" ]; then
mail -s "SME Server Contribs Updates available for `hostname`" $MAILADDR < $TMPFILE
else
echo "SME Server Contribs Updates available for `hostname`"
cat $TMPFILE
fi
fi
rm -f $TMPFILE $TMP1
rm -fr /tmp/check4contribsupdates.*
On tombe sur 2 exemples de bashism, cette page
http://mywiki.wooledge.org/Bashism donne des exemples de substitutions de code pour rendre les scripts plus conforme à la norme POSIX.
Pour l'instant ce n'est pas catastrophique mais un jour alors que vous essaierez de faire fonctionner un bout de code comme le suivant :
#!/bin/sh
#VAR
i=0
#BEGIN
while ((i++ < 10)); do
echo "\$i=$i"
done
#END
et que ça ne fonctionnera pas en sh ou en dash vous saurez pourquoi

chao