Ich habe ein Skript, das ein Programm aufruft (speziell einen ttf2afm
Teil von Tetex 3.0), das manchmal fehlerhaft ist und manchmal nicht. Die Informationen, die ich benötige, werden immer ausgedruckt, bevor sie sich als fehlerhaft herausstellen. Es fällt mir jedoch schwer, die Pipe-Umleitung daran zu hindern, fehlzuschlagen, und nichts an die Pipe auszugeben, wenn das Programm fehlschlägt.
Ich habe versucht, durch ein FIFO umzuleiten, den Prozess mit einem true
am Ende in Klammern zu setzen , von einer Shell-Funktion aus auszuführen und einzufügen sh -c
, aber das Skript scheint nie zuzulassen, dass der Prozess etwas ausgibt , umgeleitet oder auf andere Weise - nicht einmal zu stderr.
Ich weiß, dass es zur Ausgabe fähig ist, da es perfekt in der Lage ist, es über die Befehlszeile, aber aus irgendeinem Grund nicht über ein Skript auszugeben.
Meine Frage ist, gibt es eine Möglichkeit für das Skript, die Tatsache, dass das Programm segfaults und geben Sie mir die Ausgabe trotzdem zu ignorieren?
Ich verwende ein BASH 4.1.10 (2) -Release.
quelle
Ich habe es schließlich durch Ausprobieren herausgefunden. Die Lösung ist irgendwie verworren:
Anscheinend sind die
exec
Ursachen dafürttf2afm
, dass der Subshell-Prozess mit dem eingeschlossenen Fehler übernommen wird und in einer Umgebung ausgeführt wird, in der es unerheblich ist, ob ein Fehler auftritt oder nicht.Durch
ERR
das Fangen des All-Inclusive- Signals wird verhindert, dass die Subshell abstirbt und ein Signal an das Hauptskript sendet, das sofort beendet wird, wenn das Programm fehlschlägt.Das einzige Problem ist, dass der Kernel selbst eine ganze Reihe von Stack-Trace- Abfällen direkt auf dem Konsolengerät ausgibt, sobald der Prozess fehlerhaft abläuft. Es gibt also keine Möglichkeit, die Ausgabe zu verhindern [von der ich weiß], aber das spielt keine Rolle da es nicht stdout oder stderr betrifft.
quelle
ttf2afm
direkt verwendete Pufferung nicht beeinflussen . Ich frage mich, wie es(trap true ERR; exec ttf2afm "$FONT")| …
gelingt, sich anders zu verhalten alsttf2afm "$FONT" | …
.