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 | foowo goosich 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/1234in einem Fenster und nc -l 1234 < input.txt > output.txtin einem anderen scheint zu funktionieren!
LD_PRELOADBibliothek zum Überschreiben zu verwenden, write()so dass write()Aufrufe von FD 0 in FD 1 geändert werden.
fooausgezogen $PATHund der Wrapper ersetzt wird, wodurch es einen fooin dem gibt $PATH, der so funktioniert, wie er eigentlich hätte geschrieben werden sollen.