Estou usando tail -f a.txt
para assistir a atualizações em um arquivo chamado a.txt
.
Se eu atualizar o arquivo usando algo como ls -a >> a.txt
em um segundo console virtual, as alterações serão exibidas em tempo real no primeiro.
Se eu atualizar o arquivo usando o Vim em um segundo console virtual, as alterações não serão exibidas no primeiro.
Eu não necessariamente espero que ele acione uma atualização nessa janela - mas por que exatamente isso não atualiza o terminal que está executando o tail -f
comando?
tail -f
verifica anexos.tail -F
verifica se há renomeação de arquivos.Respostas:
Se você editar um arquivo
vim
, normalmente ele lê o arquivo na memória e grava um novo arquivo. Entãotail
agora está operando em um fora da cópia data do arquivo (que permanece no sistema de arquivos atétail
(e qualquer outro programa) pára de usá-lo.Você pode fazer
tail
seguir o nome do arquivo (em vez do arquivo) usando:Observe a maiúscula
F
.fonte
tail -F
trabalho! O console agora está exibindo uma mensagem como "a.txt foi substituído: após o final do novo arquivo" e é atualizada de acordo. Obrigado!Meu entendimento é que, normalmente, ao editar com
vim
, você está editando uma cópia do arquivo, que é movida para o lugar quando você escreve suas alterações no disco. Como isso aconteceunlink
inserindo o original emove
colocando o novo no lugar,tail
ele não vê novas alterações no arquivo original.fonte