Shell-status-codes machen

Nutze ich ein Makefile (mit GNU-make unter Linux) zu automatisieren meine Routinearbeit bei der Umgestaltung ein Python-Skript.
Das Skript erzeugt eine Ausgabe-Datei, und ich möchte sicherstellen, dass die Ausgabe-Datei bleibt unverändert im Gesicht meiner refactorings.

Allerdings habe ich keine Möglichkeit gefunden, um den status-code eines Befehls auf eine spätere shell if-Befehl.

Die folgende Regel zeigt das problem:

check-cond-codes:
    diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$$!=
    diff -q poalim report2008_4.csv; echo differences: =$$!=

Die ersten, die 'diff' vergleicht zwei gleiche Dateien, und die zweite vergleicht zwei unterschiedliche Dateien.
Die Ausgabe ist:

diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$!=
no differences: ==
diff -q poalim report2008_4.csv; echo differences: =$!=
Files poalim and report2008_4.csv differ
differences: ==

So offensichtlich '$$!' ist die falsche variable zur Erfassung der status-code von 'diff'.
Auch mit
SHELL := /bin/bash
am Anfang der Makefile hat das problem nicht lösen.

Einer variable die Rückgabe ist der Wert, die ich brauchen würde (wenn es überhaupt existiert) verwendet werden, in einem 'if' - Befehl in die eigentliche Regel.

Die alternative der Schaffung eines kleinen ad-hoc-shell-Skript anstelle des Schreibens alle Befehle, die inline in der Makefile ist unerwünscht, aber ich verwende es als letzten Ausweg.

Verwandte:

InformationsquelleAutor der Frage Omer Zak | 2009-04-14

Schreibe einen Kommentar