Ich habe eine ausführbare Linux-Datei foo
, die Eingaben von fd 0 liest und Ausgaben in fd 0 schreibt ( nicht fd 1). Dies funktioniert gut für die interaktive Verwendung im Terminal.
Wie kann ich dieses Programm über die Shell-Befehlszeile so ausführen, dass Lesevorgänge von fd 0 aus einer Datei stammen, Schreibvorgänge von fd 0 jedoch in eine andere Datei verschoben werden?
Das Beste , was ich mir einfallen lassen kann, ist, $ goo input.txt output.txt | foo
wo goo
sich ein Hilfsprogramm befindet, aber ich kenne kein vorhandenes Hilfsprogramm, und ich weiß nicht einmal, ob die von eingerichtete Pipe |
bidirektional ist.
foo <> /dev/tcp/localhost/1234
in einem Fenster und nc -l 1234 < input.txt > output.txt
in einem anderen scheint zu funktionieren!
LD_PRELOAD
Bibliothek zum Überschreiben zu verwenden, write()
so dass write()
Aufrufe von FD 0 in FD 1 geändert werden.
foo
ausgezogen $PATH
und der Wrapper ersetzt wird, wodurch es einen foo
in dem gibt $PATH
, der so funktioniert, wie er eigentlich hätte geschrieben werden sollen.