Je souhaite exécuter une commande conditionnelle dans un makefile gnu, en fonction de la valeur de retour d'une autre commande.Retour d'un pipeline shell
Pour être précis, quelque chose comme ceci:
lsmod | grep -q pfc && sudo rmmod pfc
Si la liste actuelle des modules en sortie par lsmod
contient pfc
, retirez-le. Cela fonctionne, avec le petit problème que si la commande grep
échoue (le module n'est pas présent) tout le pipeline retourne non nul, ce qui provoque l'échec de la commande, mais en fait c'est un succès.
Je pourrais juste ajouter un ; true
à la fin pour toujours le forcer au succès, mais ceci n'attrapera pas les échecs dans la commande rmmod
!
Je voudrais quelque chose que la plupart du temps portatif à travers sh
implémentations, mais techniquement je suppose que j'utilise dash
puisque c'est là où sh
points sur Ubuntu.
Parce que ce pipeline _unconditionally_ retourne vrai. En particulier, si 'rmmod' échoue, nous voulons retourner false, mais ce qui précède retourne vrai. – BeeOnRope
Ceci est seulement un problème si vous utilisez 'set -e', ce qui est une mauvaise idée précisément parce qu'il suppose que tous les statuts de sortie non-zéro indiquent une erreur. – chepner
@chepner - Je n'utilise pas 'set -e', mais l'application appelante (' gmake') traite les retours non-nuls comme des erreurs, ce qui est logique. – BeeOnRope