Editar arquivo de texto com o Vim não atualiza a cauda -f

17

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 executando o comando tail -f ?

    
por alex 21.07.2017 / 18:28

2 respostas

31

Se você editar um arquivo com vim , normalmente ele lerá o arquivo na memória e gravará um novo arquivo. Portanto, tail agora está operando em uma cópia desatualizada do arquivo (que permanece no sistema de arquivos até que tail (e qualquer outro programa) pare de usá-lo.

Você pode fazer tail seguir o nome do arquivo (em vez do arquivo) usando:

tail -F yourfile  

Observe o maiúsculo F .

    
por 21.07.2017 / 18:59
8

Meu entendimento é que, normalmente, ao editar com vim , você está editando uma cópia do arquivo, que é colocada no lugar quando você grava suas alterações no disco. Como isso acontece por unlink ing o original e move o novo no lugar, tail não vê novas alterações no arquivo original.

    
por 21.07.2017 / 18:30

Tags