Creo que es posible si adjunta el proceso del intérprete relacionado a gdb. Lo probé con este perl one-liner
perl -e 'do { print "x\n"; sleep(1) } while(1)'
y funciona pero desafortunadamente no con un script bash similar.
En primer lugar, debe averiguar el PID de ese proceso cuya salida desea capturar. Luego comience gdb
en otra terminal y ejecute los siguientes comandos gdb
attach PID
call close(2)
call open("/abs/olu/te/path/filename", 65, 384)
detach PID
después de eso, todos los datos que se escriben stderr
se redirigen a /abs/olu/te/path/filename
, ya que
attach PID
adjunta el proceso a gdb y lo detiene
call close(2)
cierra el stderr
descriptor de archivo del proceso (para stdout
el descriptor de archivo es 1)
call open(...)
abre un nuevo archivo y toma el número entero sin usar más bajo para el descriptor de archivo recién creado y
detach PID
continúa el proceso
Al menos en mi máquina. Las dos primeras líneas son compatibles con POSIX, pero no la tercera.
El segundo y el tercer argumento de open
en la tercera línea están documentados en man 2 open
. En mi caso, 65 significa que open
debería crear el archivo y abrir el archivo de solo escritura, es decir O_WRONLY | O_CREAT
(definido en fcntl.h
). El tercer argumento le dice a open que cree el archivo con permiso de lectura y escritura para el usuario, es decir S_IWUSR | S_IRUSR
(definido en sys/stat.h
). Entonces, tal vez tenga que encontrar los valores apropiados en su máquina usted mismo.