J'ai créé un script qui vérifiera l'existence des fichiers .gz dans le répertoire de base et s'il les trouve, il les déplacera dans une nouvelle structure basée sur la date actuelle. Le script fonctionne parfaitement quand le shell est défini sur/bin/bash et je l'exécute manuellement, mais ce script est exécuté comme un travail cron (par logrotate) et je crois qu'il DOIT être exécuté sous/bin/sh car je ne suis pas Assurez-vous d'avoir logrotate pour l'exécuter sous/bin/bash. Le code en question estVérifier si le fichier existe [SH]
# Move rotated logs to the archive
if [ -f $BASEDIR/*.gz ]; then
logger "$SNAME Moving rotated logs to $DIRECTORY"
mv $BASEDIR/*.gz $DIRECTORY
else
echo "$BASEDIR/*.gz"
logger "$SNAME No rotated logs to move. Is this normal?"
fi
En bash le chèque conditionnel fonctionne très bien, sous sh il se plaint, il y a trop d'arguments. Si je mets des choses entre guillemets, le caractère générique et les retours ne sont pas faux.
Toute aide serait fantastique!
En aparté - noms en majuscules sont utilisés pour les variables ayant un sens à l'OS ou le shell, alors que les noms minuscules sont réservés à l'utilisation des applications. Voir le quatrième paragraphe de http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html –
@CharlesDuffy, merci pour cette information, je n'ai jamais connu cette distinction et j'ai toujours utilisé toutes les majuscules pour les variables disponibles globalement. – hobbymaster001