Suponha que 3 seja um desses descritores de arquivo nos quais você está interessado.
3 pode estar apontando para file
, por exemplo:
exec 3>file
Seu aplicativo grava em 3:
app() { echo hello world >&3; }
Se você quiser interceptar 3, precisará dup
para outro descritor de arquivo (por exemplo, 4):
exec 4>&3
e redireciona (= substitui) 3 com um pipe para o seu processo de interceptor, que tem que escrever de volta para o alvo original (ou então não seria um interceptador), que agora é salvo em fd 4:
app 3> >(tee /dev/tty >&4) #this interceptor writes to the terminal
O texto acima deve imprimir hello world
para o terminal e file
deve acabar com hello world
.
Tudo isso pressupõe que esses descritores de arquivos estejam abertos antes de você iniciar o processo. Se você quiser interceptar saídas filedescriptor dinamicamente em tempo de execução, então eu tenho medo que você tenha que modificar o código, injetar código em tempo de execução ou interceptar chamadas do sistema com algo como ptrace
.