Você pode usar socat para fazer o stdout de mydaemon de um dispositivo terminal e ter todos os dados gravados lá enviados para um canal em socat .
Aqui usando ls -l /proc/self/fd no lugar de mydaemon
$ socat -u 'exec:"ls -l /proc/self/fd",pty,raw' - | tee file.out
total 0
lrwx------ 1 stephane stephane 64 Aug 20 13:32 0 -> /dev/pts/25
lrwx------ 1 stephane stephane 64 Aug 20 13:32 1 -> /dev/pts/26
lrwx------ 1 stephane stephane 64 Aug 20 13:32 2 -> /dev/pts/25
lr-x------ 1 stephane stephane 64 Aug 20 13:32 3 -> /proc/30930/fd
Veja como o stdout de ls é um novo dispositivo pty ( /dev/pts/26 )
Se você não tiver socat , também poderá usar script :
$ script -qc 'stty raw; ls -l /proc/self/fd' file.out < /dev/null
total 0
lrwx------ 1 stephane stephane 64 Aug 20 13:35 0 -> /dev/pts/26
lrwx------ 1 stephane stephane 64 Aug 20 13:35 1 -> /dev/pts/26
lrwx------ 1 stephane stephane 64 Aug 20 13:35 2 -> /dev/pts/26
lr-x------ 1 stephane stephane 64 Aug 20 13:35 3 -> /proc/31010/fd
(o < /dev/null é para que script não configure seu terminal no modo raw ).
Observe, entretanto, que nesse caso, todos os stdin, stdout e stderr são redirecionados para essa pty. Para stdin e stderr ficarem intocáveis como na abordagem socat , você poderia fazer:
$ script -qc 'stty raw; exec <&3 2>&4 3<&- 4>&-; ls -l /proc/self/fd' file.out 3<&0 4>&2 < /dev/null
total 0
lrwx------ 1 stephane stephane 64 Aug 20 13:37 0 -> /dev/pts/25
lrwx------ 1 stephane stephane 64 Aug 20 13:37 1 -> /dev/pts/26
lrwx------ 1 stephane stephane 64 Aug 20 13:37 2 -> /dev/pts/25
lr-x------ 1 stephane stephane 64 Aug 20 13:37 3 -> /proc/31065/fd
Nem todas as script implementations / versions suportam a opção -c ou -q .
Note que alguns sistemas vêm com um script unbuffer expect para isso, mas tenha cuidado com vários erros e limitações.