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).