the file's content is shown as empty as long as the file is opened for writing by Bash.
Isso não é exatamente o que está acontecendo. O que está acontecendo é que a tarefa armazena em buffer sua saída - ela é acumulada na memória por um tempo, depois gravada no arquivo em partes . O buffer na memória tem um tamanho fixo de alguns kilobytes. Isso é feito para desempenho, já que cada gravação de arquivo tem uma sobrecarga relativamente alta. Então você não verá a saída do seu programa no começo, mas verá o que acontecerá peça por peça. Isso não tem nada a ver com o bash.
Se quiser ver a saída imediatamente, você pode iniciar sua programa com unbuffer
(do expect
pacote de software). Você troca o desempenho pelo imediatismo.
Um segundo problema é que cat
mostrará a saída que já foi emitida e sairá assim que ela chegar ao final do arquivo. Se você quiser continuar lendo a saída quando ela for anexada, use o tail
siga o modo.
nohup unbuffer task >out.txt &
tail -n +1 -f out.txt
Pressione Ctrl + C para sair de tail
. Em vez de tail
, você pode usar less
e seu modo de seguimento (pressione F
; pressione Ctrl + C para parar a leitura).