Die Ausgabeumleitung funktioniert für ein bestimmtes Programm nicht

8

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

Ich habe versucht, zum Beispiel:

%Vor%

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 -

%Vor%

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 verwende CentOS 5.5 und Bash.

    
kshahar 16.12.2010, 09:14
quelle

3 Antworten

5

Basierend auf Ihrem strace hört es sich an, als würde das Programm testen, ob stdin und / our 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.

    
Laurence Gonsalves 16.12.2010, 09:29
quelle
9
%Vor%

Bearbeiten : Wenn Sie das tatsächlich getan haben und es ein Tippfehler in Ihrer Frage war. Es ist möglich, dass die Anwendung prüft, ob die Ausgabe ein TTY ist.

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

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

    
plundra 16.12.2010 09:18
quelle
1

Versuchen Sie, jeweils einen einzelnen Stream nach / dev / null umzuleiten, um zu sehen, auf welchem ​​es gedruckt wird:

%Vor%

Dann siehst du, welchen Stream du aufnehmen musst. Aus technischen Gründen drucken einige Programme sogar informative Nachrichten auf stdout.

    
l0b0 16.12.2010 09:20
quelle