Ich führe einfach einen Job aus (nehme an, foo.sh).
./foo.sh
[Press Ctrl-Z to stop]
bg # enter background
Und es generiert eine Ausgabe an stdout und stderr. Gibt es eine Methode, um von stdout und stderr auf eine andere Datei umzuleiten, anstatt auf den aktuellen Bildschirm?
Antwort1
Offenbar habe ich Ihre Frage beim ersten Mal falsch gelesen, daher hier meine aktualisierte Antwort:
Nachdem Sie Ihr Programm in den Hintergrund geschickt haben, müssen Sie zunächst seine PID finden
pgrep foo.sh
Dann könnten Sie verwenden gdb
, um sich an diesen Prozess anzuhängen
gdb -p <PID>
In gdb
ändern Sie dann, wohin dieses Programm schreibt
p dup2(open("/path/to/file",577, 420), 1)
p dup2(1, 2)
dann löst man sich vom Prozess und gibt aufgdb
detach
quit
Eine kleine Erklärung
577
ist äquivalent zuO_CREAT|O_WRONLY|O_TRUNC
420
ist äquivalent zuS_IRUSR|S_IWUSR|S_IRGRP|S_IROTH
- Der Aufruf
open
öffnet also die Datei und kürzt sie auf 0 Bytes, wenn sie existiert, oder erstellt eine neue mit den richtigen Dateiberechtigungen, wenn sie nicht existiert - Der erste Aufruf von
dup2
dupliziert den Dateideskriptor, der vom Aufruf von zurückgegeben wurdeopen
(1
das iststdout
). - Der zweite Aufruf von
dup2
dupliziert den Dateideskriptor1
auf2
(das iststderr
).