Ich halte es für möglich, wenn Sie den Prozess des zugehörigen Interpreters an gdb anhängen. Ich habe es mit diesem Perl-Einzeiler versucht
perl -e 'do { print "x\n"; sleep(1) } while(1)'
und es funktioniert aber leider nicht mit einem ähnlichen bash script.
Zunächst müssen Sie die PID des Prozesses ermitteln, dessen Ausgabe Sie erfassen möchten. Starten Sie dann gdbin einem anderen Terminal und führen Sie die folgenden gdb-Befehle aus
attach PID
call close(2)
call open("/abs/olu/te/path/filename", 65, 384)
detach PID
danach werden die gesamten Daten, in die geschrieben stderrwird, weitergeleitet /abs/olu/te/path/filename, da
attach PID Hängt den Prozess an gdb an und stoppt ihn
call close(2)schließt den stderrFiledescriptor des Prozesses (für stdoutden Filedescriptor ist 1)
call open(...) öffnet eine neue Datei und verwendet die niedrigste nicht verwendete Ganzzahl für den neu erstellten Filedescriptor und
detach PID setzt den Prozess fort
Zumindest auf meiner Maschine. Die ersten beiden Zeilen sind POSIX-kompatibel, die dritte jedoch nicht.
Das zweite und das dritte Argument openin der dritten Zeile sind in dokumentiert man 2 open. In meinem Fall bedeutet 65, dass opendie Datei erstellt und die Datei schreibgeschützt geöffnet werden soll, dh O_WRONLY | O_CREAT(definiert in fcntl.h). Das dritte Argument weist open an, die Datei mit Lese- und Schreibberechtigung für den Benutzer zu erstellen, dh S_IWUSR | S_IRUSR(definiert in sys/stat.h). Vielleicht müssen Sie die entsprechenden Werte an Ihrer Maschine selbst herausfinden.