Ich möchte einen Befehl in einem Gnu-Makefile basierend auf dem Rückgabewert eines anderen Befehls bedingt ausführen.True aus einer Shell-Pipeline zurückgeben
Um genau zu sein, so etwas wie diese:
lsmod | grep -q pfc && sudo rmmod pfc
Wenn die aktuelle Liste der Module als Ausgabe von lsmod
pfc
enthält, es entfernen. Dies funktioniert mit dem kleinen Problem, dass, wenn der grep
Befehl fehlschlägt (Modul nicht vorhanden), die gesamte Pipeline nicht Null zurückgibt, was dazu führt, dass der Befehl als fehlgeschlagen interpretiert wird, aber tatsächlich ist dies ein Erfolg.
Ich könnte nur eine ; true
am Ende hinzufügen, um es immer zum Erfolg zu zwingen, aber dies wird keine Fehler im rmmod
Befehl fangen!
Ich möchte etwas, das meist portabel über sh
Implementierungen, aber technisch denke ich, ich verwende dash
seit dem ist, wo sh
Punkte auf Ubuntu ist.
Da die Pipeline _unconditionally_ true zurückgibt. Insbesondere wenn 'rmmod' fehlschlägt, wollen wir false zurückgeben, aber das obige Ergebnis ist wahr. – BeeOnRope
Dies ist nur ein Problem, wenn Sie 'set -e' verwenden, was eine schlechte Idee ist, gerade weil angenommen wird, dass alle Nicht-Null-Exit-Zustände einen Fehler anzeigen. – chepner
@chepner - Ich benutze 'set -e' nicht, aber die aufrufende Anwendung (' gmake') behandelt Nicht-Null-Returns als Fehler, was sinnvoll ist. – BeeOnRope