Eu acho uma solução via mkfifo
, que cria um pipe nomeado, ou FIFOs .
Simples como criar um link simbólico e é possível usar todo o redirecionamento permitido no shell.
mkfifo MyOutput
ls -l
dá
0 prw-r--r-- 1 My_username My_username 0 May 11 17:45 MyOut|
Eu posso iniciar o programa com redirecionamento para esse link
./Execute_program > MyOutput & cat MyOutput
e a saída começa a fluir no terminal.
Se eu pressionar ctrl + c eu interrompo o fluxo mas não o processo em execução (eu tenho que usar algo como kill pid
ou kill %1
para fazer isso ).
Quando, em uma segunda vez, eu pedir para o FIFOs fazer o dump no terminal (novamente com cat MyOutput
), ele começará a despejar a saída daquele momento.
Notas e avisos:
- Até que eu não peça um despejo de
FIFOs
, ele armazenará toda a saída.
Como eu vou perguntar pela primeira vez, ele irá liberar todos. - posso redirecionar (ou anexar) para outro arquivo
cat MyOutput >> NewRealFile
- Eu também posso usar
cat MyOutput
de outro terminal! -
Warning : Se eu pedir a 2 programas (ou instâncias) diferentes para redirecionar a saída para o mesmo
FIFOs
, o fluxo será mesclado (sem a priori para distinguir de quais programas essa linha vem). - Aviso : Se eu perguntar 2 ou mais vezes (talvez de diferentes terminais), ele fornecerá uma linha para cada solicitação dividindo a saída para o solicitante. Talvez haja uma solução segura ...