A edição do arquivo de texto com o Vim não atualiza tail -f

17

Estou usando tail -f a.txtpara assistir a atualizações em um arquivo chamado a.txt.

Se eu atualizar o arquivo usando algo como ls -a >> a.txtem 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 -fcomando?

alex
fonte
5
tail -fverifica anexos. tail -Fverifica se há renomeação de arquivos.
thrig

Respostas:

31

Se você editar um arquivo vim, normalmente ele lê o arquivo na memória e grava um novo arquivo. Então tailagora 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 tailseguir o nome do arquivo (em vez do arquivo) usando:

tail -F yourfile  

Observe a maiúscula F .

Bob Eager
fonte
1
tail -Ftrabalho! 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!
alex
8

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 acontece unlinkinserindo o original e movecolocando o novo no lugar, tailele não vê novas alterações no arquivo original.

DopeGhoti
fonte