Rohrleitungen stdout und stderr innerhalb einer Makefile-Regel

Möchte ich pipe die Ausgabe eines Skripts zu einem anderen Programm. Etwas, was ich normalerweise tun würde, mit diesen beiden Formen:

 python test.py 2>&1 | pyrg
 python test.py |& pyrg

Mein problem ist, dass es nicht funktioniert, die aus einem makefile:

[Makefile]
test:
    python test.py 2>&1 | pyrg [doesn't work]

Möchte ich vermeiden, schreiben Sie eine Skriptdatei, die die Arbeit macht.

Edit:

Dies scheint wie eine pyrg Problem:

python test.py 2>&1 | tee test.out // Writes to the file both stderr and stdout
cat test.out | pyrg                // Works fine!
python test.py 2>&1 | pyrg         // pyrg behaves as if it got no input

Dies ist eine schlechte Lösung für mich, da ich nie an die cat Teil im Falle eines test-Fehler (alles ist in einem Makefile-Regel)

  • Sollte dies funktionieren. make übergibt die gesamte Zeile zu /bin/sh für interpretation, also alles, was diese Schale (die nicht brauchen, um Ihre Benutzer-shell) kann verstehen funktioniert.
  • Wie genau hat es nicht funktioniert? Versuchen Sie export SHELL := /bin/bash irgendwo in deinem makefile.
  • Der zweite Befehl ausgeführt, als ob es didn ' T erhalten die Eingabe von stdin. Und eigentlich läuft vor dem ersten. Mit || statt | unterhält die Reihenfolge aber noch einmal pyrg erhalten nicht die Eingabe.
  • diese Einstellung half, zu vermeiden, ein Fehler bei der Verwendung von |&. Aber das Verhalten immer noch so wie in meinem vorherigen Kommentar.
  • Sollte es nicht egal in welcher Reihenfolge die Programme gestartet werden. Die zwei werden verbunden, indem das Rohr auch so.
  • was ich meine ist, dass das zweite Programm schreibt seine Ausgabe als ob es hatte nichts stdin (für pyrg den Hilfe-text). So es scheint, Sie sind nicht miteinander verbunden durch das Rohr. Nur dann sehe ich das erste Programm die Ausgabe auf dem Bildschirm (sollten, wurden umgeleitet, um die zweite)
  • Äh, ja, das ist ganz kaputt dann!!!
  • |& ist csh-syntax, würde ich nicht erwarten, dass die Arbeit in einem makefile. Sind Sie sicher, dass es kein Tippfehler ist, wie wenn man python test.py 2&>1 | pyrg ? gibt es nun eine Datei 1 im Arbeitsverzeichnis?
  • Versuchen Sie es ohne die 2&>1. Es tut pipe stdout?
  • es funktioniert.
  • kein Tippfehler und kein 1 - Datei (es sei denn, ich habe absichtlich machen, die Tippfehler 🙂 )
  • Wenn Sie gut mit einem bashism, wie etwa pyrg <(python test.py 2>&1)?
  • hat die richtige Antwort

InformationsquelleAutor Xyand | 2012-08-01
Schreibe einen Kommentar