Eu acho que é possível se você anexar o processo do intérprete relacionado ao gdb. Eu tentei com este perl one-liner
perl -e 'do { print "x\n"; sleep(1) } while(1)'
e funciona, mas infelizmente não com um script bash similar.
Primeiro de tudo você tem que descobrir o PID desse processo cuja saída você deseja capturar. Então inicie gdb em outro terminal e execute os seguintes comandos gdb
attach PID
call close(2)
call open("/abs/olu/te/path/filename", 65, 384)
detach PID
depois disso, todos os dados gravados em stderr serão redirecionados para /abs/olu/te/path/filename , pois
-
attach PIDanexa o processo ao gdb e o interrompe -
call close(2)fecha ostderrfiledescriptor do processo (parastdouto filedescriptor é 1) -
call open(...)abre um novo arquivo e usa o menor inteiro não utilizado para o filedescriptor recém-criado e -
detach PIDcontinua o processo
Pelo menos na minha máquina. As duas primeiras linhas são compatíveis com POSIX, mas não a terceira.
O segundo e o terceiro argumento de open na terceira linha estão documentados em man 2 open . No meu caso, 65 significa que open deve criar o arquivo e abrir o arquivo somente gravação, ou seja, O_WRONLY | O_CREAT (definido em fcntl.h ). O terceiro argumento diz open para criar o arquivo com permissão de leitura e gravação para o usuário, por exemplo, S_IWUSR | S_IRUSR (definido em sys/stat.h ). Então talvez você tenha que descobrir os valores apropriados em sua máquina sozinho.