Ich habe eine bestimmte ausführbare Linux-Datei, die von einer größeren Anwendung aufgerufen wird, um einige Berechnungen durchzuführen. Ich möchte die Art und Weise ändern, wie die Berechnungen durchgeführt werden, dazu muss ich zuerst verstehen, wie die ausführbare Datei aufgerufen wird und auf welche Weise die Parameter und Daten übertragen werden.
Ich möchte also die Befehlszeilenparameter stdin und stdout überwachen, wenn diese ausführbare Datei aufgerufen wird. Der normale Betrieb der ausführbaren Datei sollte nicht gestört werden.
Gibt es dafür eine einfache Möglichkeit?
Aktualisierung:
Ich habe versucht, die Shell-Skript-Platzhalter-Idee zu verwenden, um alle Daten mit dem folgenden Skript zu erfassen:
#!/bin/bash
export LOGFILE=/tmp/logname
echo `env` > $LOGFILE-env
echo "[email protected]" >> $LOGFILE-arguments
tee -a $LOGFILE-stdin | /path/to/real/executable 2>&1 | tee -a $LOGFILE-stdout
Dies funktioniert gut für Testeingaben, aber es hängt nur, wenn es wirklich aufgerufen wird. Wahrscheinlich ist da noch mehr los, als ich vermutet habe.
Akzeptierte Antwort:
Option 1 wäre, den Quellcode der aufrufenden App zu ändern und tee
einzufügen in die Ausgabepipeline, um in diesem Stadium eine Kopie der Ausgabe zur Überprüfung zu erhalten.
Option 2 wäre, ein Wrapper-Skript um die betreffende ausführbare Datei zu schreiben. Ein schnelles Skript, das stdin und Argumente an die echte App weitergibt, dann die Ausgabe an einen Ort leitet, an dem Sie sie überprüfen können, und sie auch wieder ausspuckt, so wie die App nur ein paar Zeilen zum Aufpeppen sein sollte. Platzieren Sie es an einem speziellen Ort und fügen Sie diesen Ort vor Ihrer PATH-Variablen hinzu, und führen Sie dann Ihre Anwendung aus.
#!/bin/sh
cat - | /path/to/realapp [email protected] | tee /tmp/debug_output