Que tal sh -c './program > file.txt; cat file.txt' &
?
Como posso redirecionar o stdout de um programa para um arquivo quando ele é executado em segundo plano?
Eu tenho um programa que gera saída a cada segundo. Quando eu corro normalmente e redireciono para um arquivo, a saída está no arquivo como esperado:
#./program > file.txt
#cat file.txt
output
output
output
#
Quando tento fazer a mesma coisa em segundo plano, o arquivo fica vazio:
#./program > file.txt &
#cat file.txt
#
Ao redirecionar o stdout para um arquivo de texto, você está alterando o tipo de fluxo do console para o arquivo . A saída do console é sem buffer, enquanto a saída do arquivo é armazenada em buffer. Até o programa liberar o dispositivo stdout (arquivo), o texto continuará sendo armazenado em buffer até que o limite de buffer seja atingido. Se o texto "output \ n" for impresso a cada 2 segundos e o limite for 4.096 bytes, levaria quase 20 minutos para ver qualquer saída do programa no arquivo.
Tags command-line bash stdout linux centos