linux und Die Ausgabeumleitung funktioniert für ein bestimmtes Programm nicht




stdout linux (3)

Unter Linux versuche ich, stdout von einer Konsolenanwendung in eine Datei statt in eine Konsole umzuleiten. Ich habe den Quellcode nicht. Ich habe mehrere Methoden ausprobiert, aber alle führten zu einer leeren Datei. Ohne Ausgabeumleitung funktioniert alles einwandfrei (ich sehe Konsolenmeldungen).

Ich habe versucht, zum Beispiel:

progname > out.txt
progname > out.txt 2&>1

Und nichts erscheint in out.txt und in der Konsole.

Ich habe versucht, die Anwendung mit strace auszuführen. Wenn ich keine Umleitung verwende, sehe ich Zeilen wie -

write(1, "bla bla", 8)

Wenn ich die Ausgabeumleitung einführe, gibt es überhaupt keine Schreibaufrufe, was mich denken lässt, dass die Anwendung nach etwas sucht, bevor sie die Nachricht schreibt. Nach was sucht die Anwendung? Wie kann ich es umgehen?

Ich benutze CentOS 5.5 und Bash.


progname > out.txt 2>&1

Edit : Wenn du das tatsächlich getan hast und es war ein Tippfehler in deiner Frage. Es ist möglich, dass die Anwendung prüft, ob die Ausgabe ein TTY ist.

Edit2: Ok, in diesem Fall versuche das script -qc progname > out.txt > 2>&1

In Debian / Ubuntu ist das script ein Teil des bsdutils Pakets, das ein Essential-Paket ist und immer installiert ist.


Basierend auf Ihrem strace klingt es wie das Programm testet wenn stdin und / unsere stdout ein tty ist. Ich habe es nie benutzt, aber Sie könnten versuchen, empty.sourceforge.net zu verwenden. Es wird angenommen, dass ein Pseudo-Tty erstellt wird, der die Überprüfung Ihres Programms täuschen sollte.


Versuchen Sie, jeweils einen einzelnen Stream nach / dev / null umzuleiten, um zu sehen, auf welcher Seite er gedruckt wird:

progname > /dev/null
progname 2> /dev/null

Dann sehen Sie, welchen Stream Sie erfassen müssen. Aus technischen Gründen drucken einige Programme sogar informative Nachrichten auf stdout.





output-redirect