Aparentemente leí mal su pregunta la primera vez, así que aquí está mi respuesta actualizada:
Después de enviar su programa a un segundo plano, primero debe encontrar su PID
pgrep foo.sh
Entonces podría usar gdb
para adjuntar a ese proceso
gdb -p <PID>
En gdb
después cambia en este programa escribe en
p dup2(open("/path/to/file",577, 420), 1)
p dup2(1, 2)
luego te desconectas del proceso y sales gdb
detach
quit
Una pequeña explicacion
577
es equivalente a O_CREAT|O_WRONLY|O_TRUNC
420
es equivalente a S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH
- Entonces, la llamada a
open
abre el archivo y lo trunca a 0 bytes si existe o crea uno nuevo con los permisos de archivo correctos si no existe
- La primera llamada a
dup2
duplica el descriptor de archivo devuelto por la llamada al open
descriptor de archivo 1
(que es stdout
)
- La segunda llamada a
dup2
duplica el descriptor de archivo 1
a 2
(que es stderr
)