Je veux valider sample.x pour les lignes non vides et les lignes sans commentaires dans makefile, si la validation réussit, il devrait s'imprimer avec succès et sinon, il devrait quitter l'exécution.
J'essaye avec le code ci-dessous mais je n'arrive pas à réussir.
validate=$(sed "/^\s*$/d" ${TEX_FILENAME} | sed "/^ *%/d;s/%.*//" | wc -l)
if [ "${validate}" -gt 0 ];\
then\
echo " validate success";\
else\
echo " validate not successfull";\
echo;\
exit 2;\
fi
Il y a un certain nombre de problèmes, de complications et de bugs ici.
Dans un Makefile, vous devez doubler tous les signes dollar que vous souhaitez transmettre au shell.
Vous sed
ne comprenez probablement pas le dialecte regex que vous essayez d'utiliser.
Avoir un script vous dire «échec» est un peu théorique lorsque le but make
est de vous dire quand quelque chose a échoué.
Compter si le nombre de correspondances est égal à zéro est un anti-modèle idiot. Vérifiez simplement s'il y a des correspondances. La plupart des outils regex se termineront avec un code de résultat différent de zéro lorsqu'ils ne parviendront pas à trouver une correspondance, ce qui est précisément ce qui make
garde un œil sur (bien que sed
cela ne le fasse pas réellement; mais nous n'en avons pas vraiment besoin sed
ici).
validate: ${TEX_FILENAME}
grep -q -v -e '^[[:space:]]*$$' -e '^[[:space:]]*%' $<
Si make
cela ne s'arrête pas, le fichier était valide. Ajoutez peut-être un commentaire au-dessus de la grep
commande si vous avez peur d'oublier à quoi cela sert.
Si vous voulez utiliser Perl regex, voyez peut-être si votre système l'a grep -P
(mais comprenez que ce n'est pas portable) ou réécrivez-le simplement en Perl.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras